我使用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])]
但是如果我想放入一个静态列名,就像制造商一样,那就打破了。我似乎无法弄清楚如何混合静态列名称和动态列名称。我环顾四周但找不到答案。
会感激任何想法!
答案 0 :(得分:5)
如果您引用“&#34;制造商&#34;
,您应该没问题。”data.temp <- data[, .N, by=c("manufacturer",columns[i])]
在?'[.data.table'
帮助页面,by=
可以是
单个未加引号的列名,列名表达式的列表(),包含逗号分隔列名的单个字符串(其中空格很重要,因为列名可能包含空格,即使在开头或结尾),或列名称的字符向量。
这似乎是最简单的方式来满足您的需求。