将条件指定为变量以在R中赋值

时间:2016-08-31 08:44:37

标签: r

我有一个数据框,我想根据条件分配百分比和原因:

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)

任何帮助都将不胜感激。

2 个答案:

答案 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