data.table包中的if else语句

时间:2015-06-19 17:51:19

标签: r data.table

我有一个6列和4.5百万行的数据集。我想写一个逻辑检查,如果在第五列中有值为零,则在第六列中放置1。你能解释一下如何构建算法来做到这一点吗?在第五列中,我发现我的单元格值为零。我想执行如果在第五列中我有零值将1放在第六列中,如果不放0?我必须使用data.table包。我尝试这个 数据名称[,6] = ifelse(数据名称[,5] == 0,1,数据名称[,6])。

2 个答案:

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