data.table和列名

Car*_*los 1 r data.table

我正在使用data.table在一列中获取一些基本统计信息,同时按另一列进行过滤.

这是命令

stats <- as.data.frame(mydata[, j = list(Sum = sum(as.numeric(get(selection))),
                                         Average = mean(as.numeric(get(selection))),
                                         Count = length(get(selection))), 
                                by = list(get(filters))])
Run Code Online (Sandbox Code Playgroud)

哪里:

  • mydata是一个包含20个左右列的data.table
  • selection是以编程方式传递的列名
  • filters也是以编程方式传递的列名

如果我将自己限制在一个过滤器(一列),一切正常,但我想过滤多个列.

有可能做到:

by = list(get(filters[1]), get(filters[2]), ...) 
Run Code Online (Sandbox Code Playgroud)

但是,这需要我知道将使用多少个过滤器.这是我不想要的限制.

如何编写by =来获取任意数量的过滤器(列名称) - 我只是尝试了mget(过滤器),但这不起作用.

谢谢!

卡洛斯

Rol*_*and 5

Data.tables by参数接受列名称的字符向量(请参阅文档:) help("data.table").没有必要get.只是用by = c(filters).

例:

library(data.table)
DT <- data.table(mtcars)

filters <- c("am", "gear")
DT[, mean(mpg), by=c(filters)]
#   am gear       V1
#1:  1    4 26.27500
#2:  0    3 16.10667
#3:  0    4 21.05000
#4:  1    5 21.38000
Run Code Online (Sandbox Code Playgroud)