2016-03-18 10 views
2

tüm faktör seviyelerine (bulunan ve mevcut değildir) için:R: agrega aşağıdaki bir <code>data.frame</code> trivially <code>dplyr</code> ile bir araya getirecek

z <- data.frame(a = rnorm(20), b = rep(letters[1:4], each = 5)) 

library(dplyr) 

z %>% 
    group_by(b) %>% 
    summarise(out = n()) 

Source: local data frame [4 x 2] 

     b out 
    (fctr) (int) 
1  a  5 
2  b  5 
3  c  5 
4  d  5 

Ancak, bazen, bir veri kümesi bir faktör eksik olabilir. Bu durumda çıktının 0 olmasını istiyorum. Örneğin, tipik veri kümesinin 5 grubunun olması gerektiğini varsayalım.

z$b <- factor(z$b, levels = letters[1:5]) 

Ama açıkça orada bu özelherhangi değildir ancak başka olabilir. Bu verileri, factors eksik için length0 olduğundan nasıl toplayabilirim?

İstenilen çıktı:

Source: local data frame [4 x 2] 

     b out 
    (fctr) (int) 
1  a  5 
2  b  5 
3  c  5 
4  d  5 
5  e  0 
+0

Bu 'tapply (z $ b, z $ b, uzunluk)' – Raad

+1

gibi 'tapply' kullanabilirsiniz Bu bir [açık bir konu olduğunu düşünüyorum github] (https://github.com/hadley/dplyr/issues/341). – JasonAizkalns

cevap

1

Buna yaklaşmanın bir yolu "tidyr" den complete kullanmaktır. Sütun "b" faktör ilk mutate kullanmak zorunda:

library(dplyr) 
library(tidyr) 

z %>% 
    mutate(b = factor(b, letters[1:5])) %>% 
    group_by(b) %>% 
    summarise(out = n()) %>% 
    complete(b, fill = list(out = 0)) 
# Source: local data frame [5 x 2] 
# 
#  b out 
# (fctr) (dbl) 
# 1  a  5 
# 2  b  5 
# 3  c  5 
# 4  d  5 
# 5  e  0 
1
bir geçici çözüm tüm seviyeler içeren bir tabloyla katılmaktır

:

z <- full_join(z, data.frame(b=levels(z$b)) 

Bu NA için analiz değişkenleri, içinde tüm eksik satırları ayarlayacaktır Genel durum onları sıfırlamaktan daha mantıklı olacaktır. Gerektiğinde z[is.na(z)] <- 0 ile sıfıra değiştirebilirsiniz.

İlgili konular