我有一个数据框,我想根据条件分配百分比和原因:
attach(df)
df$profile[ColumnX>=0.5, ColumnY == 2]<-"Profile 1"
df$prediction[ColumnX>=0.5, ColumnY == 2]<-0.84
df$reason[ColumnX>=0.5, ColumnY == 2]<-"Reason 1"
detach(df)
我可以通过使用&#34; ColumnX&gt; = 0.5,ColumnY == 2&#34;?
的变量来避免重复我尝试了以下操作,但它无效:
var <- expression(ColumnX>=0.5, ColumnY == 2)
attach(df)
df$profile[eval(var)]<-"Profile 1"
df$prediction[eval(var)]<-0.84
df$reason[eval(var)]<-"Reason 1"
detach(df)
任何帮助都将不胜感激。
答案 0 :(得分:2)
您可以根据条件创建逻辑向量,然后根据此进行子集化。
# sample data
df <- data.frame(X=runif(100), Y=sample(1:4, 100, replace = TRUE))
# create a logical vector with the conditions
var <- df$X >= 0.5 & df$Y == 2
# assign new values
df$profile[var] <- "Profile1"
df$prediction[var] <- 0.84
答案 1 :(得分:0)
您需要存储逻辑条件db.user.insert(objectToInsert, function(err,docsInserted){
console.log(docsInserted);
});
,并使用这些值填充新列。
<强>解决方案强>
利用ColumnX>=0.5, ColumnY == 2
在一次通话中创建结果:
dplyr::mutate
更多信息
它也适用于library(dplyr)
mutate(df,
cond = ColumnX >= 0.5 & ColumnY == 2,
profile = ifelse(cond, "Profile 1", NA),
prediction = ifelse(cond, 0.84, NA),
reason = ifelse(cond, "Reason 1", NA),
cond = NULL)
函数,但需要三个而不是一个步骤,首先生成base::transform
ition列,生成新列cond
,{ {1}}和profile
,然后再次删除prediction
。
您也可以使用results
代替cond
,例如:
ifelse