R 聚合列表中指定的列

R 聚合列表中指定的列,r,aggregate,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)) 但是,我想使用列表变量选择列。我尝试了一些复杂的粘贴语句来查看和,但我得到了错误消息,如“未找到对象'Z' 如何使用base R以简捷易读的方式实现这一点,最好不用库,do.call或难读

我正在使用以下方法聚合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))
但是,我想使用列表变量选择列。我尝试了一些复杂的
粘贴
语句来查看和,但我得到了错误消息,如“未找到对象'Z'

如何使用base R以简捷易读的方式实现这一点,最好不用库,
do.call
或难读的
paste
语句充满括号和撇号?理想情况下:

k = c("Z", "ID")
aggregate(magic(k), list(X=X, Y=Y), data, c)
试试这个:

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))
data=data.frame(X=c(1,3,3),Y=c(2,3,3),Z=c(5,6,7),ID=c(10,11,12))
#我会引用:
by.expr您可以

aggregate(data[k], data[c("X","Y")], c)

data.frame是一个列表,因此
by=data[c(“X”,“Y”)]
在这里可以根据需要工作

aggregate(数据[k],数据[c(“X”,“Y”)],c)
包含在
?aggregate
中,语法有两种形式。@Frank:
aggregate(数据[k],数据[c(“X”,“Y”)],c)
又短又漂亮!您可以将此作为建议答案发布。我怀疑会有更好的建议。发布是因为我找不到一个被愚弄的人,而OP建议了它。