2015-12-18 26 views
2

我使用聚合函數按組進行計數。聚集函數只返回計數的團體,如果計數> 0。這是我當計數爲零時,按組計數0

dt <- data.frame(
n = c(1,2,3,4,5,6), 
id = c('A','A','A','B','B','B'), 
group = c("x","x","y","x","x","x")) 

應用聚合函數

my.count <- aggregate(n ~ id+group, dt, length) 

現在看到的結果

my.count[order(my.count$id),] 

我獲得以下

id group n 
1 A  x 2 
3 A  y 1 
2 B  x 3 

我需要以下(最後一排具有零,我需要)

id group n 
1 A  x 2 
3 A  y 1 
2 B  x 3 
4 B  y 0 

感謝您幫助提前

回答

3

您可以用一套完整的「身份證merge你的「my.count」對象「和‘組’列:

merge(my.count, expand.grid(lapply(dt[c("id", "group")], unique)), all = TRUE) 
## id group n 
## 1 A  x 2 
## 2 A  y 1 
## 3 B  x 3 
## 4 B  y NA 

上有讓您展示如何如果需要用0來代替NA幾個問題。

5

我們可以創建另一列「IND」,然後用dcast從「長」到「寬」重塑,指定fun.aggregatelengthdrop=FALSE

library(reshape2) 
dcast(transform(dt, ind='n'), id+group~ind, 
      value.var='n', length, drop=FALSE) 
# id group n 
#1 A  x 2 
#2 A  y 1 
#3 B  x 3 
#4 B  y 0 

還是一個base R選項

as.data.frame(table(dt[-1])) 
0

如果你有興趣的頻率而已,你和你的公式創建一個頻率表中把它變成一個數據幀:

as.data.frame(xtabs(formula = ~ id + group, dt)) 

顯然這不適用於其他聚合函數。我仍然在等待dplyr的總結功能,讓用戶決定是否保留零組。也許你可以在這裏爲這項改進投票:https://github.com/hadley/dplyr/issues/341