首页 > 解决方案 > R:如何按计数聚合行

问题描述

这是我的数据框

ID=c(1,2,3,4,5,6,7,8,9,10,11,12)
favFruit=c('apple','lemon','pear',
       'apple','apple','pear',
       'apple','lemon','pear',
       'pear','pear','pear')
surveyDate = ('1/1/2005','1/1/2005','1/1/2005',
         '2/1/2005','2/1/2005','2/1/2005',
         '3/1/2005','3/1/2005','3/1/2005',
         '4/1/2005','4/1/2005','4/1/2005')

df<-data.frame(ID,favFruit, surveyDate)

我需要聚合它,以便我可以在 R 中绘制一个折线图,以按日期拆分 favFruit 的 favFruit 计数,但我无法创建聚合表。我的数据有 45000 行,因此无法手动解决。

surveyYear   favFruit  count
1/1/2005       apple     1
1/1/2005       lemon     1
1/1/2005       pear      1
2/1/2005       apple     2
2/1/2005       lemon     0
2/1/2005       pear      1
... etc

我试过了,但 R 打印了一个错误

df2 <- aggregate(df, favFruit, FUN = sum)

我试过这个,另一个错误

df2 <- aggregate(df, date ~ favFruit, sum)

我在网上查了解决方案,但他们的数据通常包括一列我没有的数量,而且解决方案过于复杂。是否有捷径可寻?提前谢谢。感谢任何建议该链接作为可能重复但它具有日期和行数的人。但我的问题需要按日期和 favFruit 的行数(多一列)1

更新:Ronak Shah 的解决方案奏效了。谢谢!

标签: raggregategrouping

解决方案


Ronak 提供的解决方案非常好。如果您希望在数据框中保留零计数。你可以使用table功能:

data.frame(with(df, table(favFruit, surveyDate)))

输出:

   favFruit surveyDate Freq
1     apple   1/1/2005    1
2     lemon   1/1/2005    1
3      pear   1/1/2005    1
4     apple   2/1/2005    2
5     lemon   2/1/2005    0
6      pear   2/1/2005    1
7     apple   3/1/2005    1
8     lemon   3/1/2005    1
9      pear   3/1/2005    1
10    apple   4/1/2005    0
11    lemon   4/1/2005    0
12     pear   4/1/2005    3

推荐阅读