如何在data.table中最有效地将列设置为NA?

时间:2017-02-09 22:15:29

标签: r data.table

我正在尝试将某些列设置为NA。例如:

DT2 <- data.table(Id = rep(c(1,2,3),each = 20),
                 x1 = rnorm(20),
                 x2 = rnorm(20),
                 x3 = c(NA,NA,rnorm(18)))
DT2[,2] <- NA # sets the second column NA

令人惊讶的是,DT2[,c(F,T,F,F)] <- NA在这种情况下不起作用,需要使用which。 但是,当您按索引将多列设置为NA时,上面的大数据表似乎相当慢。我想知道是否有更好的方法,也许是使用set? 谢谢你的任何提示!

2 个答案:

答案 0 :(得分:0)

虽然可以使用列位置来更新值,但通常最好使用列名进行编码,以防止列顺序更改时出现问题。以下显示如何按名称

设置单个列或多个列的所有值
library(data.table)

DT2[, x1 := NA]
DT2[, c("x1", "x3") := NA]

如果你想使用data.frame语法(对于小数据集来说实际上更快)

DT2[, "x1"] <- NA
DT2[, c("x1", "x3")] <- NA

答案 1 :(得分:0)

正如弗兰克指出的那样,需要使用:=来提高速度,例如以上例子:

DT[, (c(2,3)) := NA]