2014-09-24 22 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

相關問題