2017-02-03 10 views
1
set.seed(1) 
dat <- data.frame(ID = sample(letters,50,rep=TRUE)) 
dat %>% 
    group_by(ID) %>% 
    summarise(no_rows = length(ID)) 

ランダムなサンプルを作成する上記のコードがあります。しかし、要約された出力が0であってもすべてのカウントレベルを表示するようにすることはできますか?Rグループの場合、dplyrがゼロの場合でもすべての因子レベルのカウントを表示します。

私は上記のコードを実行すると時々私は20行を取得し、時々私は25などを得ます。 毎回26行を返すようにします。

答えて

1

私たちは、指定されたlevelsfactorに 'ID' を変換するとちょうどこれも動作しますtidyverse

library(tidyverse) 
dat %>% 
    mutate(ID=factor(ID, levels = letters)) %>% 
    complete(ID) %>% 
    group_by(ID) %>% 
    summarise(no_rows = n()) 
+0

ありがとう私はこれを使用しました。私はそれも日付のためにこれを行うことが可能ですかと思っていた。たとえば、 "ID"列の年は1ヶ月でしたが、dplyrを使用して完了することが可能です – Chinwobble

+0

@Chinwobbleはい、可能です。月の表示方法について詳しく説明できますか? 1:12の場合、 'table(factor(dat $ ID、levels = 1:12))' – akrun

+0

これはSQL Serverからの適切な日時です。だから彼らは 'yyyy-MM-dd'形式の日付形式の書式で書かれています – Chinwobble

1

table

table(factor(dat$ID, levels = letters)) 

またはそれを使用して使用することができます。

set.seed(1) 
dat <- data.frame(ID = sample(letters,50,rep=TRUE)) 
levels(dat$ID) <- letters 
as.data.frame(dat %>% xtabs(formula = ~ ID)) 
# ID Freq 
#1 a 2 
#2 b 1 
#3 c 1 
#4 d 1 
#5 e 2 
#6 f 3 
#7 g 2 
#8 h 1 
#9 i 4 
#10 j 2 
#11 k 4 
#12 l 1 
#13 m 2 
#14 n 1 
#15 o 3 
#16 p 3 
#17 q 3 
#18 r 1 
#19 s 5 
#20 t 2 
#21 u 1 
#22 v 2 
#23 w 2 
#24 x 1 
#25 y 0 
#26 z 0 
関連する問題