2016-09-21 28 views
1

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

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

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正在被满足。

现在,我得到这个错误:

Error in ifelse(conditions[i], 1, 0) : (list) object cannot be coerced to type 'logical'

我不明白,因为所有的数据帧中的信息“条件”是该类型的“逻辑”。

回答

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 
+0

谢谢!仅供我自己参考,该行的“+(...)”部分是什么?有没有该功能的名称? – Geogrammer

+0

@Geoprorammer它只是强制逻辑数据集为二进制。规范的方法是'df [paste0(“var_”,seq_along(columns))] < - lapply(conditions,as.integer)' – akrun

相关问题