我有一个6列和4.5百万行的数据集。我想写一个逻辑检查,如果在第五列中有值为零,则在第六列中放置1。你能解释一下如何构建算法来做到这一点吗?在第五列中,我发现我的单元格值为零。我想执行如果在第五列中我有零值将1放在第六列中,如果不放0?我必须使用data.table包。我尝试这个 数据名称[,6] = ifelse(数据名称[,5] == 0,1,数据名称[,6])。
答案 0 :(得分:5)
使用data.table
,我们可以使用:=
,效率更高(来自@ plafort帖子的示例数据)
library(data.table)#v1.9.4+
setDT(df)[X5==0, X6:=1]
答案 1 :(得分:1)
这是一个基本的R方式:
df[,6][df[,5] == 0] <- 1
在许多情况下,您可以避免编写明确的if
语句。条件隐含在子集中。读出它会说,“在数据框的第六列中,将值1赋给与第五列相邻的所有值。”更熟悉在data.table
中分配列值的人可以轻松地将其应用于您的案例。
数据强>
set.seed(5)
df <- data.frame(replicate(6, sample(0:5, 3)))
df[2,5] <- 0
df
X1 X2 X3 X4 X5 X6
1 1 1 3 0 1 1
2 3 0 4 1 0 5
3 4 2 5 4 5 3
df[,6][df[,5] == 0] <- 1
df
X1 X2 X3 X4 X5 X6
1 1 1 3 0 1 1
2 3 0 4 1 0 1
3 4 2 5 4 5 3