您可以使用setNames,如:
blubb <- setNames(aggregate(dat$two ~ dat$one, ...), c("One", "Two"))
或者,您可以绕过巧妙的公式方法,并使用如下语法:
blubb <- aggregate(list(One = dat$one), list(Two = dat$two), ...)
更新
此更新只是为了帮助您开始自行获取解决方案。
如果您检查 stats:::aggregate.formula 的代码,您将在末尾看到以下几行:
if (is.matrix(mf[[1L]])) {
lhs <- as.data.frame(mf[[1L]])
names(lhs) <- as.character(m[[2L]][[2L]])[-1L]
aggregate.data.frame(lhs, mf[-1L], FUN = FUN, ...)
}
else aggregate.data.frame(mf[1L], mf[-1L], FUN = FUN, ...)
如果您只想将函数名称附加到聚合的变量中,也许您可以将其更改为:
if (is.matrix(mf[[1L]])) {
lhs <- as.data.frame(mf[[1L]])
names(lhs) <- as.character(m[[2L]][[2L]])[-1L]
myOut <- aggregate.data.frame(lhs, mf[-1L], FUN = FUN, ...)
colnames(myOut) <- c(names(mf[-1L]),
paste(names(lhs), deparse(substitute(FUN)), sep = "."))
}
else {
myOut <- aggregate.data.frame(mf[1L], mf[-1L], FUN = FUN, ...)
colnames(myOut) <- c(names(mf[-1L]),
paste(strsplit(gsub("cbind\\(|\\)|\\s", "",
names(mf[1L])), ",")[[1]],
deparse(substitute(FUN)), sep = "."))
}
myOut
这基本上捕获了使用deparse(substitute(FUN)) 为FUN 输入的值,因此您可以修改函数以接受自定义后缀,甚至可能是后缀向量。这可能可以通过一些工作来改进,但我不会这样做!
这里是a Gist,应用了这个概念,创建了一个名为“myAgg”的函数。
这里是一些示例输出只是生成的列名:
> names(myAgg(weight ~ feed, data = chickwts, mean))
[1] "feed" "weight.mean"
> names(myAgg(breaks ~ wool + tension, data = warpbreaks, sum))
[1] "wool" "tension" "breaks.sum"
> names(myAgg(weight ~ feed, data = chickwts, FUN = function(x) mean(x^2)))
[1] "feed" "weight.function(x) mean(x^2)"
请注意,只有聚合变量名称会发生变化。但也要注意,如果你使用自定义函数,你最终会得到一个非常奇怪的列名!