data.table 包中的 if else 语句

if else statement in data.table package

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

这是基本的 R 方式:

df[,6][df[,5] == 0] <- 1

在许多情况下,您可以避免编写明确的 if 语句。条件隐含在子集中。读出来会说,"In the sixth column of the data frame, assign the value of 1 to all values adjacent to column five." 更熟悉在 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

使用data.table,我们可以使用:=,这样效率会更高(示例数据来自@plafort 的post)

library(data.table)#v1.9.4+
setDT(df)[X5==0, X6:=1]