我使用以下方法聚合R数据框中的多个列:
data = data.frame(X=c(1, 3, 3), Y=c(2, 3, 3), Z=c(5, 6, 7), ID=c(10, 11, 12))
with(data, aggregate(cbind(Z, ID), list(X=X, Y=Y), c))
但是,我想使用列表变量选择列。我已经尝试过查看this question和this question的一些错综复杂的paste
语句,但我收到了错误消息,例如"对象' Z'找不到"。
如何使用基本R以简单易读的方式执行此操作,最好不使用库,do.call
或难以阅读的paste
语句,其中包含括号和撇号?理想的情况是:
k = c("Z", "ID")
aggregate(magic(k), list(X=X, Y=Y), data, c)
答案 0 :(得分:1)
你可以做到
aggregate(data[k], data[c("X","Y")], c)
data.frame是一个列表,因此by=data[c("X","Y")]
可以根据需要运行。
答案 1 :(得分:0)
试试这个:
data = data.frame(X=c(1, 3, 3), Y=c(2, 3, 3), Z=c(5, 6, 7), ID=c(10, 11, 12))
# I would use quote:
by.expr <- quote(cbind(Z, ID))
with(data, aggregate(eval(by.expr), list(X=X, Y=Y), c))
# list-version:
by.l <- list("Z", "ID")
by.expr <- parse(text = paste("cbind(", unlist(by.l), ")"))
with(data, aggregate(eval(by.expr), list(X=X, Y=Y), c))