data.table&列名

时间:2014-09-30 14:43:46

标签: 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))])

其中:

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

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

可以这样做:

by = list(get(filters[1]), get(filters[2]), ...) 

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

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

谢谢!

卡洛斯

1 个答案:

答案 0 :(得分: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