好的,所以我有一个配置数据框,它将指定我希望如何聚合另一个数据帧中的几列。
配置框架:
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]
相交答案 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)