如何按组对变量求和

ぃ、小莉子 提交于 2020-03-15 01:21:03

假设我有两列数据。 第一个包含诸如“第一”,“第二”,“第三”等类别。第二个具有代表我看到“第一”的次数的数字。

例如:

Category     Frequency
First        10
First        15
First        5
Second       2
Third        14
Third        20
Second       3

我想按类别对数据进行排序并求和:

Category     Frequency
First        30
Second       5
Third        34

我将如何在R中执行此操作?


#1楼

如果x是包含数据的数据框,则以下操作将满足您的要求:

require(reshape)
recast(x, Category ~ ., fun.aggregate=sum)

#2楼

library(plyr)
ddply(tbl, .(Category), summarise, sum = sum(Frequency))

#3楼

只是添加第三个选项:

require(doBy)
summaryBy(Frequency~Category, data=yourdataframe, FUN=sum)

编辑:这是一个非常古老的答案。 现在,我建议使用group_by并从dplyr summarise ,如@docendo答案中所示。


#4楼

使用aggregate

aggregate(x$Frequency, by=list(Category=x$Category), FUN=sum)
  Category  x
1    First 30
2   Second  5
3    Third 34

在上面的示例中,可以在list指定多个尺寸。 可以通过cbind合并同一数据类型的多个聚合指标:

aggregate(cbind(x$Frequency, x$Metric2, x$Metric3) ...

(嵌入@thelatemail评论), aggregate也有一个公式界面

aggregate(Frequency ~ Category, x, sum)

或者,如果您想汇总多个列,则可以使用. 符号(也适用于一列)

aggregate(. ~ Category, x, sum)

tapply

tapply(x$Frequency, x$Category, FUN=sum)
 First Second  Third 
    30      5     34 

使用此数据:

x <- data.frame(Category=factor(c("First", "First", "First", "Second",
                                      "Third", "Third", "Second")), 
                    Frequency=c(10,15,5,2,14,20,3))

#5楼

与这个问题有些相关

您也可以只使用by()函数:

x2 <- by(x$Frequency, x$Category, sum)
do.call(rbind,as.list(x2))

那些其他软件包(plyr,reshape)具有返回data.frame的好处,但是值得一提的是by(),因为它是基本函数。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!