2017-12-22 5 views
1

dplyrのsummarize関数を使用して、データフレーム内の各変数のレベル数をグループ化した後に抽出したいと考えています。ここ は、データフレームの複製である:ここでdplyrを使用してグループ化されたデータのレベル(nlevel)の数を要約する方法はありますか?

x=c("A","A","A","A","A","B","B","B","B","C","C","C","D","D","D","E","E") 
y=c("a","b","c","a","b","a","b","c","d","c","b","e","b","d","f","a","b") 
z=c("x","x","x","y","y","p","p","p","p","t","v","v","m","m","n","o","o") 
d=data.frame(x,y,z) 

は私が

library(dplyr) 
    d %>% 
    group_by(x) %>% 
    summarise(total=n(), 
      Y=nlevels(y), 
      Z=nlevels(z)) 

を使用しています。しかし、これはYとデータフレームにレベルを要約Z列「d」を生成するコードですグループ化されたデータではなく、

私は生成したいデータフレームは次のようになります。

x=c("A","B","C","D","E") 
total=c(5,4,3,3,2) 
Y=c(3,4,3,3,2) 
Z=c(2,1,2,2,1) 
d2=data.frame(x,total,Y,Z) 
d2 

ありがとうございました!

答えて

4

あなたはそのためのn_distinctが必要になります。

d %>% 
    group_by(x) %>% 
    summarise(total = n(), 
      Y = n_distinct(y), 
      Z = n_distinct(z)) 

結果:

# A tibble: 5 x 4 
     x total  Y  Z 
    <fctr> <int> <int> <int> 
1  A  5  3  2 
2  B  4  4  1 
3  C  3  3  2 
4  D  3  3  2 
5  E  2  2  1 
関連する問題