如何将变量列名传递给 "by" 命令?

How to pass a variable column name to the "by" command?

我经常使用 R 中的 data.table 包来汇总数据。在这种特殊情况下,我只是计算给定列组在数据集中出现的次数。但是我无法合并一个循环来动态执行此操作。

通常情况下,我会这样总结数据。

data <- data.table(mpg)
data.temp1 <- data[, .N, by="manufacturer,class"]
data.temp2 <- data[, .N, by="manufacturer,trans"]

但现在我想遍历我的数据集和绘图中感兴趣的列。我不想一遍又一遍地重复代码,而是想将它放在一个 for 循环中。像这样:

columns <- c('class', 'trans')

for (i in 1:length(columns)) {
    data.temp <- data[, .N, by=list(manufacturer,columns[i])]
    #plot data
}

如果我只想要感兴趣的列,我可以在循环中执行此操作并且它有效:

data.temp <- data[, .N, by=get(columns[i])]

但是如果我想输入一个静态列名,比如制造商,它就会中断。我似乎无法弄清楚如何将静态列名与动态列名混合使用。我环顾四周,但找不到答案。

如有任何想法,我们将不胜感激!

如果你只引用`"manufacturer"

应该没问题
data.temp <- data[, .N, by=c("manufacturer",columns[i])]

?'[.data.table'帮助页面,by=可以是

A single unquoted column name, a list() of expressions of column names, a single character string containing comma separated column names (where spaces are significant since column names may contain spaces even at the start or end), or a character vector of column names.

这似乎是满足您需求的最简单方法。