1
votes

Calculer les fréquences pour des groupes de variables

Je veux calculer la fréquence des modalités en fonction des espèces trouvées.

Voici le bloc de données, et je veux compter le nombre de chaque type _gite et compter ceux où seulement aegypti a été trouvé, seulement ceux où albo ont été trouvés et mélangés où les deux ont été trouvés ensemble.

type gite             aegypti  albopictus  mixed  total
recipient_abandonne         2           0      0      2
recipient stockage          3           1      1      5
autres                      0           2      0      2
total                       5           3      1      9

Voici comment il devrait ressembler à:

type_gite            aegypti          albopictus                    total 
recipient_abandonne       19                   0                       19
recipient_stockage         0                   2                        2
recipient_stockage         8                   0                        8
recipient_stockage        36                   0                       36
recipient_stockage        13                   0                       13
recipient_stockage         1                   3                        4
autres                     0                   1                        1
autres                     0                   9                        9
recipient_abandonne        3                   0                        3

Quel code ou quelle formule d'agrégation convient le mieux?


0 commentaires

3 Réponses :


-1
votes

Je pense que vous cherchez quelque chose comme ça. J'ai pris des données factices aléatoires comme exemple.

library(dplyr)
# Create dummy data
df <- data.frame(matrix(rnorm(10), ncol = 2))
df <- cbind(c("blah", "blah", "meh", "meh", "meh"), df)
colnames(df) <- c("grouping_variable", "some_var", "some_other_var")
# Group by 1 variable & summarise on rest
df %>% group_by(grouping_variable) %>% summarise_all(sum)


2 commentaires

Merci pour votre solution, mais c'est similaire à ce que je recherche, pas exactement le point.


Pour votre bloc de données par exemple, vous devez enregistrer l'occurrence de la "variable_groupage". Le code ci-dessus ne correspond pas exactement à mes données



0
votes

Voici ce que j'ai trouvé:

#create data
df = data.frame(type_gite = c('recipient_abandonne', 'recipient_stockage', 'recipient_stockage', 
                              'recipient_stockage', 'recipient_stockage', 'recipient_stockage', 'autres', 'autres',
                              'recipient_abandonne'),
                aegyti_collected = c(19, 0, 8, 36,13,1,0,0,3),
                albopictus_collected = c(0,2,0,0,0,3,1,9,0),
                total_collected = c(19,2,8,36,13,4,1,9,3))

#Classify as Mixed or only one of species using case when
df$label = case_when(df$albopictus_collected == 0 ~ 'Aegyti Only',
                                          df$aegyti_collected == 0 ~ 'Albopictus Only',
                                          TRUE ~'Mixed')

#frequency table
df = data.frame(rbind(table(df$type_gite, df$label)))

#add column title back in
df = df %>% tibble::rownames_to_column(var = 'type_gite')

#create total column
library(janitor)
df = df %>% adorn_totals("col")


1 commentaires

Vous avez également besoin d'un total pour chaque colonne, donc à la fin, faites df = df%>% adorn_totals ("row")



0
votes

Vous pouvez utiliser dplyr et janitor (pour obtenir la ligne Total ) pour obtenir ce dont vous avez besoin:

df1 <- structure(list(type_gite = structure(c(2L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 2L), 
        .Label = c("autres", "recipient_abandonne", "recipient_stockage"), 
        class = "factor"), 
        aegyti_collected = c(19, 0, 8, 36, 13, 1, 0, 0, 3), 
        albopictus_collected = c(0, 2, 0, 0, 0, 3, 1, 9, 0), 
        total_collected = c(19, 2, 8, 36, 13, 4, 1, 9, 3)), 
        class = "data.frame", row.names = c(NA, -9L))


2 commentaires

Merci pour votre réponse, mais le code a un problème car il donne un message d'erreur "Erreur dans select (., -Total): argument non utilisé (-total)". Je n'en connais pas le sens. Pouvez-vous nous fournir une explication? Merci encore.


@ArmelTedjou Je soupçonne que vous n'avez pas réellement de colonne total et c'est quelque chose que vous avez ajouté à la question à titre d'illustration. select (-total) supprime simplement cette colonne de notre sortie, donc si vous n'avez pas réellement cette colonne, débarrassez-vous de select (-total)%>% ceci tuyauterie et cela fonctionnera pour vous. De plus, les noms de colonnes doivent correspondre à votre ensemble de données réel! Donc, si vous avez cette colonne et qu'elle s'appelle total_collected , utilisez simplement cela au lieu de total .