Data.table 用 NA 替换值序列

Data.table replace sequence of values with NA

我希望使用变量作为列指示符在数据 table 中用 NA 替换特定的值序列。

Example:

    dt <- data.table(col1=1:10, col2=11:20)
    specific_column <- 2

Output: 
      col1 col2
 1:    1   11
 2:    2   12
 3:    3   13
 4:    4   14
 5:    5   15
 6:    6   16
 7:    7   17
 8:    8   18
 9:    9   19
10:   10   20

我想专门用 NA 替换 col2 和位置 2:5 中的值以获得以下输出:

 col1 col2
 1:    1   11
 2:    2   NA
 3:    3   NA
 4:    4   NA
 5:    5   NA
 6:    6   16
 7:    7   17
 8:    8   18
 9:    9   19
10:   10   20

我能够 select 我感兴趣的值:

   dt[2:5,..specific_column]

很遗憾,无法使用数据帧的替换方法:

dt[2:5,..specific_column] <- NA
#Error in `[<-.data.table`(`*tmp*`, 2:5, ..specific_column, value = NA) : 
  object '..specific_column' not found

我找到的唯一解决方法是:

dt[2:5,print(specific_column)] <- NA

这行得通,但由于它总是打印“特定列”,因此大大减慢了进度。 (我正在使用更大的数据集(10000行,28列))

是否有一种简单的解决方案可与用于数据框的解决方案相媲美?

非常感谢。

尝试使用

dt[2:5, (specific_column) := NA]

data.table

中有一个set()函数
library(data.table)
DT <- data.table(col1=1:10, col2=11:20)
specific_column <- 2L
set(DT, i=3:5, specific_column, NA)
DT

从 data.table 版本 1.14.3(目前正在开发中)开始,有一个新的 env 参数用于对 data.table 调用进行编程控制(参见 here)。对于这种简单的情况可能有点矫枉过正,但我​​在这里展示了如何使用它,因为它对于要求更高的情况来说是一个潜在有用的功能,因此很高兴知道:

dt[2:5, mycol := NA, env = list(mycol = specific_column)]

注意,您可以使用data.table::update.dev.pkg()

安装最新的开发版本