通过列索引而不是名称将函数应用于data.table列的子集

时间:2013-05-28 03:51:48

标签: r data.table multiple-columns indices

我正在尝试将函数应用于大型data.table中的一组列,而不是单独引用每个列。

a <- data.table(
  a=as.character(rnorm(5)),
  b=as.character(rnorm(5)),
  c=as.character(rnorm(5)),
  d=as.character(rnorm(5))
)
b <- c('a','b','c','d')

上面的MWE,这个:

a[,b=as.numeric(b),with=F]

有效,但是:

a[,b[2:3]:=data.table(as.numeric(b[2:3])),with=F]

不起作用。将as.numeric函数应用于a的第2列和第3列而不单独引用它们的正确方法是什么。

(在实际数据集中有数十列,所以这是不切实际的)

1 个答案:

答案 0 :(得分:43)

惯用法是使用.SD.SDcols

您可以通过包装()

强制在父框架​​中评估RHS
a[, (b) := lapply(.SD, as.numeric), .SDcols = b]

对于第2:3栏

a[, 2:3 := lapply(.SD, as.numeric), .SDcols = 2:3]

mysubset <- 2:3
a[, (mysubset) := lapply(.SD, as.numeric), .SDcols = mysubset]