2017-05-23 36 views
0

數據集名稱:sample。更好的代碼來獲取一個功能的比例?

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

也許更換'過濾器(SIU == 「N」)'和'GROUP_BY(SIU)' – timfaber

+0

我不知道你怎麼想的性別比例,但也許總能幫助:'骨料(DF $ SEX,by = list(df $ SIU),table)'或'aggregate(df $ SEX,by = list(df $ SIU),function(x)sum(x =='m')/ length(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