我知道我可以在聚合数据后重新命名列:

blubb <- aggregate(dat$two ~ dat$one, ...)
colnames(blubb) <- c("One", "Two")

这没什么错.但是有没有一种方法可以一次性聚合和命名这些列呢?有点像:

blubb <- aggregate( ... , cols = c("One", "Two"))

以某种方式捕捉原始列名并执行以下操作将是非常好的(并且可以防止输入错误):

blubb <- aggregate( ... , cols = c(name_of_dat$one, name_of_dat$two."_Mean"))

推荐答案

您可以使用setNames,如下所示:

blubb <- setNames(aggregate(dat$two ~ dat$one, ...), c("One", "Two"))

或者,您可以绕过slick formula方法,使用以下语法:

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"的函数.

以下是一些示例输出of just the resulting column names:

> 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)"

请注意,只有聚合的变量名会更改.但也要注意,如果使用自定义函数,最终会得到一个非常奇怪的列名!

R相关问答推荐

R根据名称的载体对收件箱列采取行动

当y大于阈值和值范围时,在时间序列中突出显示区域

R通过字符串中的索引连接数据帧r

棒棒糖图表大小和线宽参数故障标签未出现

如何提高以键ID为列的表中键查找的效率?

pickerInput用于显示一条或多条geom_hline,这些线在图中具有不同 colored颜色

如何在R中合并和合并多个rabrame?

如何使用按钮切换轨迹?

在组中添加值增加和减少的行

从所有项的 struct 相同的两级列表中,将该第二级中的所有同名项绑定在一起

通过在colname中查找其相应值来创建列

无法定义沿边轨迹的 colored颜色 渐变(与值无关)

仅在Facet_WRAP()中的相应方面包含geom_abline()

以NA为通配符的R中的FULL_JOIN以匹配其他数据中的任何值.Frame

识别连接的子网(R-igraph)

将数据集旋转到长格式,用于遵循特定名称模式的所有变量对

访问数据帧中未定义的列时出现R错误

R预测包如何处理ARIMA(Auto.arima函数)中的缺失值

R中的Desolve:返回的导数数错误

如何使用ggplot2根据绘图中生成的斜率对小平面进行排序?