加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在R中的聚合内命名列

发布时间:2020-12-14 01:06:39 所属栏目:百科 来源:网络整理
导读:我知道我可以* re *名称列后,我聚合数据: blubb - aggregate(dat$two ~ dat$one,...)colnames(blubb) - c("One","Two") 没有什么错。但是有一种方法来一次性聚合和命名列?排序如下: blubb - aggregate( ...,cols = c("One","Two")) 这将是escpecially好(
我知道我可以* 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:
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],...)

如果所有你想做的是将函数名称附加到聚合的变量,也许你可以将其更改为:

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

请注意,只有聚合的变量名称发生更改。但请注意,如果你使用自定义函数,你会得到一个真正奇怪的列名!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读