【问题标题】:Aggregate R sum汇总 R 和
【发布时间】:2011-09-30 20:46:00
【问题描述】:

我正在写我的第一个 R中的程序,作为一个新手,我遇到了一些麻烦,希望你能帮助我。

我有一个这样的数据框:

> v1<-c(1,1,2,3,3,3,4)
> v2<-c(13,5,15,1,2,7,4)
> v3<-c(0,3,6,13,8,23,5)
> v4<-c(26,25,11,2,8,1,0)
> datos<-data.frame(v1,v2,v3,v4)
> names(datos)<-c("Position","a1","a2","a3")

> datos
  posicion a1 a2 a3
1        1 13  0 26
2        1  5  3 25
3        2 15  6 11
4        3  1 13  2
5        3  2  8  8
6        3  7 23  1
7        4  4  5  0

我需要将a1a2a3 中的数据相加(在我的实际情况下,从a1a51)按Position 分组。我正在尝试使用函数aggregate(),但它仅适用于手段,不适用于总和,我不知道为什么。

提前致谢

【问题讨论】:

    标签: r sum aggregate


    【解决方案1】:

    您需要告诉聚合函数使用 sum,因为默认情况下它会获取每个类别的平均值。例如:

    aggregate(datos[,c("a1","a2","a3")], by=list(datos$Position), "sum")
    

    【讨论】:

      【解决方案2】:

      plyr 库非常简单。

      library("plyr")
      ddply(datos, .(Position), colwise(sum))
      

      如果您有其他不应平均的非数字列,您可以使用

      ddply(datos, .(Position), numcolwise(sum))
      

      【讨论】:

      • 嗨,Brian,我已经做了一个证明,这似乎是我需要的。但是我需要用我的真实数据检查一些东西。我会告诉你。感谢您的帮助!
      • 我已经检查过了,这正是我所需要的。非常感谢!
      【解决方案3】:
      ag_df <-- aggregate(.~Position,data=datos,sum)
      

      应该给你一个数据框,其中包含每个位置的“a”值的总和。这里的技巧是公式中的 . 表示公式中所有“非分组”变量的列表。

      请注意,您可以通过以下方式获得大致相同的结果:

      sumdf <- rowsum(datos,datos$Position,na.rm=T)
      

      除了包括位置的总和!

      如果您不想聚合所有非组列,可以使用 cbind,如下所示:

      sumdf1 <- aggregate(cbind(a1,a3)~datos$Position,datos,sum)
      

      这仅对 a1 和 a3 列求和。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多