总和R总和

时间:2011-09-30 20:46:00

标签: r sum aggregate

我正在写第一篇文章 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(在我的实际案例中从a1添加到a51)的数据总和{ {1}}。我正在尝试使用函数Position,但它只适用于手段,而不适用于总和,我不知道为什么。

提前致谢

3 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:7)

使用plyr库非常简单。

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

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

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

答案 2 :(得分:0)

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列求和。