2014-09-24 23 views
0

我正在处理简单问题,但无法找到如何在R中实现简单聚合。 我想要计数数据中每个类别(ID)的行数用下面的例子设置:R - 如何计算数据集中的行按类别

Date Col1 Col2 ID 
21/01/2003 1 2 1 
27/01/2003 3 6 2 
28/01/2003 4 5 2 
29/01/2003 5 6 3 
30/01/2003 1 0 2 

我试过了*应用函数没有运气。最接近的答案我能得到我的问题是使用聚合函数:

aggregate(fact, by=list(fact$ID), FUN=length) 

的问题是,它显示在一个数据集,而不是仅仅ID &计数的所有列。我怎样才能让它变得更好。

Group.1 Date Col1 Col2 ID 
1   1 117  117  117 117 
2   2 1041 1041 1041 1041 
3   3 243  243  243 243 
4   4 474  474  474 474 

理想:我想ID重命名为分类和计数成卷,所以它看起来是这样的:

Category Volume 
     1 117 
     2 1041 
     3 243 
     4 474 

更新:

  1. 我已经安装了 “plyr” & “data.table”包。而且这两种解决方案都很好。
  2. 如何使用开箱即用实现相同的解决方案R

回答

4

通常当我要统计不同值的频率对一个变量我使用table函数而不是aggregate。你可以的table输出传递到data.frame函数来得到你想要的数据结构(我以前setNames设置变量名):

(counts <- setNames(data.frame(table(dat$ID)), c("Category", "Volume"))) 
# Category Volume 
# 1  1  1 
# 2  2  3 
# 3  3  1 
+0

感谢josilber为即时答复。我收到一个错误:找不到函数“setnames”。 – 2014-09-24 19:00:16

+0

@BIDude对不起,这是'data.table'包中的函数......来自R的一个是'setNames'。我已经更新了答案。 – josliber 2014-09-24 19:06:31

+0

所有工作正常。谢谢。 – 2014-09-24 19:19:50

2

您可以使用countplyr

> library(plyr) 
> setNames(count(df, "ID"), c("Category", "Volume")) 
# Category Volume 
# 1  1  1 
# 2  2  3 
# 3  3  1 
+0

谢谢。它安装plyr后效果很好。 – 2014-09-24 19:19:08

相关问题