使用另一个数据帧的字符串中的列名动态聚合数据帧

时间:2013-06-26 17:59:28

标签: r

好的,所以我有一个配置数据框,它将指定我希望如何聚合另一个数据帧中的几列。

配置框架:

conf <- rbind(                                                                                                                                                                  
    c("a", "cnt"),                                                                                                                                                    
    c("b", "cnt")                                                                                                                          
    )                                                                                                                                                                                

数据的数据框

dd <- data.frame(cbind(c("a1", "a1", "a1"), c("b1", "b1", "b2"), c(1, 2, 3)))
names(dd) <- c("a", "b", "cnt")

我想基本上运行这个命令:

aggregate(cnt ~ paste(conf[, 1], collapse=" + "), data=dd, sum)

理想情况下会返回

output
a1  b1 3
a1  b2 3

有意义吗?我觉得我在获取动态列名时缺少do.call或eval。或者可以将名称(dd)列表与conf [,1]

相交

2 个答案:

答案 0 :(得分:2)

这对我来说更容易(在纠正你的罪恶方式之后):

dd <- data.frame( c("a1", "a1", "a1"), c("b1", "b1", "b2"), c(1, 2, 3))
names(dd) <- c("a", "b", "cnt")

aggregate(dd$cnt , dd[ as.character(conf[, 1]) ], sum)
#--------
   a  b x
1 a1 b1 3
2 a1 b2 3

答案 1 :(得分:1)

在这里窃取@ Justin的建议就是我最终做的事情。

aggregate(as.formula(paste("cnt", 
                           paste(conf[,1], collapse=" + "), 
                           sep=" ~ ")), data=dd, sum)