如何将变量列名称传递给“by”命令?

时间:2015-06-26 20:16:57

标签: r data.table

我使用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])]

但是如果我想放入一个静态列名,就像制造商一样,那就打破了。我似乎无法弄清楚如何混合静态列名称和动态列名称。我环顾四周但找不到答案。

会感激任何想法!

1 个答案:

答案 0 :(得分:5)

如果您引用“&#34;制造商&#34;

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

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

  

单个未加引号的列名,列名表达式的列表(),包含逗号分隔列名的单个字符串(其中空格很重要,因为列名可能包含空格,即使在开头或结尾),或列名称的字符向量

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