2016-04-10 37 views
-3

Sadece dplyr kullanmaya başladım ve group_by ile çözülmesi kolay olan aşağıdaki iki problemi var, ama anlayamıyorum.R: group_by in dplyr uygulaması

data <- data.frame(cbind("year" = c(2010, 2010, 2010, 2011, 2012, 2012, 2012, 2012), 
        "institution" = c("a", "a", "b", "a", "a", "a", "b", "b"), 
        "branch.num" = c(1, 2, 1, 1, 1, 2, 1, 2))) 

data 
# year institution branch.num 
#1 2010   a   1 
#2 2010   a   2 
#3 2010   b   1 
#4 2011   a   1 
#5 2012   a   1 
#6 2012   a   2 
#7 2012   b   1 
#8 2012   b   2 

veri hiyerarşik yapılandırılmıştır: Şöyle verilere sahip en üst düzeyde bir kurum 1.

Sorun 1 başlayarak numaralandırılmıştır bir kaç dallar, olabilir: İstiyorum her yıl için bir değer olan, sadece şubeler içeren satırları seçin, bu örnek verisi sadece Şube 1 Kurumunun 1, yani seçim 1, 4 ve 5 satırları olmalıdır.

Pronlem 2: İstiyorum Bir kurumun tüm yıl boyunca sahip olduğu ortalama şube sayısını bilmek.

sorun #: bu kurum için, örneğin bir (2 + 1 + 2)/3 = 1.67 ve için kurum b Burada (1 + 0 + 2)/3 = 1.

cevap

0

bir çözüm 1:

library(dplyr) 
nYears <- n_distinct(data$year) 
data %>% group_by(institution, branch.num) %>% filter(n_distinct(year) == nYears) 
Source: local data frame [3 x 3] 
Groups: institution, branch.num [1] 

    year institution branch.num 
    (fctr)  (fctr)  (fctr) 
1 2010   a   1 
2 2011   a   1 
3 2012   a   1 

sorun # 2:

data %>% group_by(institution, year) %>% summarise(nBranches = n_distinct(branch.num)) %>% ungroup() %>% group_by(institution) %>% summarise(meanBranches = sum(nBranches)/nYears) 
Source: local data frame [2 x 2] 

    institution meanBranches 
     (fctr)  (dbl) 
1   a  1.666667 
2   b  1.000000