2017-07-16 1 views
-2

utilisant df ci-dessous, je fait une table avec des fréquences pour chaque unité en fonction de chaque combinaison de group/year.lignes de commande quand ils ne sont pas numériques

Après avoir obtenu des fréquences absolues et relatives, j'ai collé les valeurs dans une seule colonne Frequency

Est-il possible que je puisse après avoir changé la table pour avoir les unités sur les lignes, ont leur a ordonné dans l'ordre décroissant basé sur n du groupe Total en 2016? Je veux que ma sortie finale de ne pas avoir des lignes avec n et prop, seulement Frequency

df <- data.frame(cbind(sample(c('Controle','Tratado'), 
           10, replace = T), 
         sample(c(2012,2016), 10, T), 
         c('A','B','A','B','C','D','D','A','F','A'))) 

colnames(df) <- c('Group', 'Year', 'Unit') 

table <- df %>% 
    group_by(Year, Group) %>% 
    count(Unit) %>% 
    mutate(prop = prop.table(n)) %>% 
    bind_rows(df %>%            
       mutate(Group ="Total") %>%       
       group_by(Year, Group) %>%       
       count(Unit)) %>% 
    mutate(prop = prop.table(n)) 

is.num <- sapply(table, is.numeric) 
table[is.num] <- lapply(table[is.num], round, 4) 
table <- table %>% 
    mutate(Frequency = paste0(n,' (', 100*prop,'%)')) 

table <- table %>% 
    gather(type, measurement, -Year, -Group, -Unit) %>% 
    unite(year_group, Year:Group, sep = ":") %>% 
    spread(year_group, measurement) 

Voici ce que je me attends à générer:

Unit  type 2012:Total 2012:Tratado 2016:Controle 2016:Total 2016:Tratado 
1 A Frequency 2 (66.67%) 2 (66.67%)    - 2 (28.57%)  2 (100%) 
2 D Frequency   -   -  2 (40%) 2 (28.57%)   - 
3 B Frequency 1 (33.33%) 1 (33.33%)  1 (20%) 1 (14.29%)   - 
4 C Frequency   -   -  1 (20%) 1 (14.29%)   - 
5 F Frequency   -   -  1 (20%) 1 (14.29%)   - 

Notez que les résultats sont classés en fonction de la colonne 2016:Total

Répondre

0

Je viens de trouver un moyen moi-même, probablement pas le meilleur.

Après l'exécution du code sur la question, je l'ai fait ce qui suit:

table <- subset.data.frame(table, type == 'Frequency') 

table <- table %>% 
    mutate(value = substr(Total_2016, 1, nchar(Total_2016) - 7)) %>% 
    mutate(value = as.numeric(value)) %>% 
    arrange(desc(value))