我知道我可以* re *名称列后,我聚合数据:
blubb <- aggregate(dat$two ~ dat$one,...) colnames(blubb) <- c("One","Two")
没有什么错。但是有一种方法来一次性聚合和命名列?排序如下:
blubb <- aggregate( ...,cols = c("One","Two"))
这将是escpecially好(和typo-proof)以某种方式捕获原始的列名称,并喜欢:
blubb <- aggregate( ...,cols = c(name_of_dat$one,name_of_dat$two."_Mean"))
您可以使用setNames:
原文链接:https://www.f2er.com/javaschema/282545.htmlblubb <- 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],...)
如果所有你想做的是将函数名称附加到聚合的变量,也许你可以将其更改为:
if (is.matrix(mf[[1L]])) { lhs <- as.data.frame(mf[[1L]]) names(lhs) <- as.character(m[[2L]][[2L]])[-1L] myOut <- aggregate.data.frame(lhs,...) colnames(myOut) <- c(names(mf[-1L]),paste(names(lhs),deparse(substitute(FUN)),sep = ".")) } else { myOut <- aggregate.data.frame(mf[1L],paste(strsplit(gsub("cbind\\(|\\)|\\s","",names(mf[1L])),",")[[1]],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,FUN = function(x) mean(x^2))) [1] "Feed" "weight.function(x) mean(x^2)"