假设我有两列数据。 第一个包含诸如“第一”,“第二”,“第三”等类别。第二个具有代表我看到“第一”的次数的数字。
例如:
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(),因为它是基本函数。
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3194929