2017-05-23 10 views
0

データセット名:sample。グループごとに1つの機能の比率を取得するコードを改善しましたか?

のCol1:ID

Col2に:SEX(2つのレベル "M"、 "F" を有する因子)

COL3:

SIU(2つのレベル "Y"、 "N" の因子)

SIUでSEXの比率を取得したい。 私はこのコードで結果を得ることができます。

prop.table(table(sample %>% filter(SIU=="N") %>% select(SEX))) 
prop.table(table(sample %>% filter(SIU=="Y") %>% select(SEX))) 

が、それは2回実行する必要があるので、それは2文で構成されています。

同じことを行うためのより良い、簡単な方法はありますか?

編集:上記のコードの

結果

>   m   f 
> 0.4529346622 0.5470653378 
>  m   f 
> 0.3604651163 0.6395348837 

それは私が取得したいものですが、私は自分のコードが最善ではないと思います。

+0

おそらく '' GROUP_BY(SIU)で ' – timfaber

+0

は、私はあなたがセックスの比率を望むかどうかはわかりませんけど、多分集計を助けることができる'フィルタ(SIU == "N")を置き換える: '集計(DF $を(df $ SIU)、関数(x)合計(x == 'm')/長さ(x)) ' – Osdorp

+0

私の不明な質問は申し訳ありません。私はこのようにしたい:N:0.45(男性)0.54(女性)、Y:0.36(男性)0.64(女性) –

答えて

0
df <- data.frame(ID=c(1,3,4,5,3,4), SEX = c('m','f','m','f','f','f'), SIU= c('y','y','n','n','n','n')) 
aggregate(df$SEX, by=list(df$SIU), function(x) table(x)/length(x)) 
# Group.1 x.f x.m 
# 1 n 0.75 0.25 
# 2 y 0.50 0.50 
+0

私は集計機能について知りませんでした。ありがとうございました!! –

+0

問題はありません、@Ashtray。あなたの質問が解決された場合は、回答としてマークしてください。 – Osdorp

関連する問題