2017-05-23 10 views
0

Nom de l'ensemble de données: exemple.Meilleur code pour obtenir le rapport d'une entité par groupe?

Col1: ID

Col2: SEX (facteur 2 niveaux "m", "f")

Col3: SIU (facteur 2 niveaux "Y", "N")

Je veux obtenir le ratio de SEX par SIU. Je peux obtenir le résultat avec ce code:

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

mais il se compose de 2 phrases il faut être exécuté 2 fois.

Existe-t-il une meilleure façon de faire la même chose?

EDIT:

résultat du code ci-dessus

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

Il est ce que je veux, mais je pense que mon code n'est pas le meilleur.

+0

peut-être remplacer le filtre '(SIU == "N")' 'avec group_by (SIU)' – timfaber

+0

Je ne sais pas comment vous voulez que le rapport du sexe, mais peut-être globale peut aider: 'global (df $ SEX, par = liste (df $ SIU), table) 'ou' agrégation (df $ SEX, par = liste (df $ SIU), fonction (x) somme (x == 'm')/longueur (x)) ' – Osdorp

+0

désolé pour ma question imprécise. Je veux comme ceci: N: 0.45 (mâle) 0.54 (femelle), Y: 0.36 (mâle) 0.64 (femelle) –

Répondre

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

Je ne savais pas au sujet de la fonction d'agrégat. Je vous remercie!! –

+0

Pas de problème, @Ashtray. Juste s'il vous plaît marquer comme réponse si elle a résolu votre question. – Osdorp