【问题标题】:aggregate means and keep N聚合均值并保持 N
【发布时间】:2015-07-24 23:23:36
【问题描述】:

我正在尝试aggregate 一个数据集,但我还想保留观察的数量。所以我所拥有的与此类似:

aggregate(iris$Sepal.Length, by=list(iris$Species), FUN=mean)

但这会返回一个像这样的对象:

 Group.1     x
1     setosa 5.006
2 versicolor 5.936
3  virginica 6.588

当我想要的是每组中的观察数(行)(在单独的列中)

【问题讨论】:

  • 啊哈!我知道有一种简单的方法可以做到这一点。简直想不到!谢谢,@弗兰克

标签: r aggregate


【解决方案1】:

反复试验表明这是可行的:

FUN = function(x) c(m = mean(x), n = length(x))

在 dplyr 和 data.table 等包中还有其他方法可以做到这一点。

【讨论】:

  • 感谢@PierreLafortune 的提醒
【解决方案2】:

dplyr 和 hadley ftw

grp <- group_by(iris, Species)
summarise(grp, avg = mean(Sepal.Length), n =n ())

Source: local data frame [3 x 3]
     Species   avg  n
1     setosa 5.006 50
2 versicolor 5.936 50
3  virginica 6.588 50

【讨论】:

  • 谢谢。我不怎么使用 dplyr,但我的理解是你不能用用户编写的函数来总结组,对吧?我实际上使用的是我编写的函数,而不是mean
  • 您将 summarise() 与聚合函数一起使用,该函数采用值向量并返回单个数字。只要您填写该类别就可以了。
  • 啊,明白了。那讲得通。我在别处读到的东西似乎表明,summary 只需要某些预定义的函数。这一定是他们所引用的。
  • @Alex Obligatory plug for data.table stackoverflow.com/q/16342261/1191259 不幸的是,OP 将一列命名为“mean”,这有点令人困惑。这允许使用向量返回而不是标量/单值来获得乐趣。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 2021-08-12
  • 2015-06-30
  • 1970-01-01
相关资源
最近更新 更多