列表中指定的聚合列

时间:2017-09-08 14:07:38

标签: r aggregate

我使用以下方法聚合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 questionthis question的一些错综复杂的paste语句,但我收到了错误消息,例如"对象' Z'找不到"。

如何使用基本R以简单易读的方式执行此操作,最好不使用库,do.call或难以阅读的paste语句,其中包含括号和撇号?理想的情况是:

k = c("Z", "ID")
aggregate(magic(k), list(X=X, Y=Y), data, c)

2 个答案:

答案 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))