我使用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))])
其中:
如果我将自己限制在一个过滤器(一列),一切正常,但我想过滤多个列。
可以这样做:
by = list(get(filters[1]), get(filters[2]), ...)
但是,这需要我知道将使用多少个过滤器。这是我不想要的限制。
如何编写by =以获取任意数量的过滤器(列名称) - 我只是尝试了mget(过滤器),但这不起作用。
谢谢!
卡洛斯
答案 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