基于一系列True / False条件动态创建二进制值列

时间:2016-09-21 05:39:38

标签: r loops if-statement

我希望能够在数据框中创建新列,其值将由预定义的条件语句列表确定。这样做的最终目标是得到一个表二进制值,表示每个实例是否满足条件。它可能看起来像一个笨重或奇怪的输出,但它是我试图建立的经济模型的要求(重复销售模型)。

这是一个简化的可重复的例子:

df <- data.frame(a=c(1,2,3,4,5),b=c(0.3,0.2,0.5,0.3,0.7)) 
conditions <-   data.frame(y=df$b>=0.5, z=df$b>=0.7) 
columns <- c("y","z") 
for(i in length(columns)){ 
   df[, paste("var_",columns[i],sep="")] <- ifelse(conditions[i],1,0) 
} 

所以在这个例子中,我想得到“var_y”和“var_z”列,这些列的二进制值表示是否满足条件y或z的条件。

现在,我收到了这个错误:

  

ifelse错误(conditions [i],1,0):( list)对象不能   强迫输入'逻辑'

我不明白,因为数据框“条件”中的所有信息都属于“逻辑”类型。

1 个答案:

答案 0 :(得分:1)

我们可以做到

df[paste0("var_", seq_along(columns))] <- +(conditions)
df
#  a   b var_1 var_2
#1 1 0.3     0     0
#2 2 0.2     0     0
#3 3 0.5     1     0
#4 4 0.3     0     0
#5 5 0.7     1     1