2016-04-10 5 views
-3

私はちょうどdplyrの使用を始めていますが、私はgroup_byで解決しなければならない以下の2つの問題があります。R:dplyrでのgroup_byの適用

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 

データを階層構造化されています: 私はこのようになり、データを持っている最高レベルの機関が1

問題1から始まる番号が付けられているいくつかの枝が、することができます:私がしたいです各年の値が存在するブランチのみを含む行を選択します。これは、施設aのサンプルデータのみブランチ1にあります。したがって、選択肢は1行目、4行目、5行目でなければなりません。

Pronlem 2:すべての年に渡って機関が持っている平均支店数を知ること。

問題#:すなわち、機関の例では(2 + 1 + 2)/ 3 = 1.67とするための機関Bである。ここで(1 + 0 + 2)/ 3 = 1

答えて

0

一の解決策であります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 

問題#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 
関連する問題