Je voudrais utiliser summarise_at
y mutate_at
sur plusieurs variables de caractères en même temps. J'ai examiné de nombreux exemples qui utilisent des variables entières, mais je n'arrive pas à comprendre ce qui se passe avec les variables de type caractère. Ci-dessous se trouve le code que j'utilise pour produire des statistiques descriptives pour une variable de caractère (ou facteur).
library(tidyverse)
# First block of code
starwars %>%
group_by(gender) %>%
summarise (n = n()) %>%
mutate(totalN = (cumsum(n))) %>%
mutate(percent = round((n / sum(n)), 3)) %>%
mutate(cumpercent = round(cumsum(freq = n / sum(n)),3))
Cela produit :
A tibble: 5 x 5
gender n totalN percent cumpercent
<chr> <int> <int> <dbl> <dbl>
1 female 19 19 0.218 0.218
2 hermaphrodite 1 20 0.011 0.230
3 male 62 82 0.713 0.943
4 none 2 84 0.023 0.966
5 <NA> 3 87 0.034 1.000
Je voudrais produire la même chose, mais pour plusieurs variables de caractères (ou de facteurs) à la fois. Dans ce cas, utilisons les variables gender
y eye_color
C'est ce que j'ai essayé :
starwars %>%
summarise_at(vars(gender, eyecolor) (n = n()) %>%
mutate_at(vars(gender, eyecolor) (totalN = (cumsum(n))) %>%
mutate_at(vars(gender", "eyecolor) (percent = round((n / sum(n)), 3)) %>%
mutate_at(vars(gender, eyecolor) (cumpercent = round(cumsum(freq = n / sum(n)),3))))))
Je reçois l'erreur suivante :
Error in eval(expr, envir, enclos) : attempt to apply non-function
Je comprends qu'il existe des fonctions intégrées appelées funs
mais je ne veux pas les utiliser. J'ai essayé de jouer avec le code de plusieurs façons différentes pour qu'il fonctionne, mais je n'ai rien trouvé.
Ce que je voudrais produire, c'est quelque chose comme ça :
A tibble: 5 x 5
gender n totalN percent cumpercent
<chr> <int> <int> <dbl> <dbl>
1 female 19 19 0.218 0.218
2 hermaphrodite 1 20 0.011 0.230
3 male 62 82 0.713 0.943
4 none 2 84 0.023 0.966
5 <NA> 3 87 0.034 1.000
A tibble: 15 x 5
eye_color n totalN percent cumpercent
<chr> <int> <int> <dbl> <dbl>
1 black 10 10 0.115 0.115
2 blue 19 29 0.218 0.333
3 blue-gray 1 30 0.011 0.345
4 brown 21 51 0.241 0.586
5 dark 1 52 0.011 0.598
6 gold 1 53 0.011 0.609
7 green, yellow 1 54 0.011 0.621
8 hazel 3 57 0.034 0.655
9 orange 8 65 0.092 0.747
10 pink 1 66 0.011 0.759
11 red 5 71 0.057 0.816
12 red, blue 1 72 0.011 0.828
13 unknown 3 75 0.034 0.862
14 white 1 76 0.011 0.874
15 yellow 11 87 0.126 1.000
Peut-être qu'une boucle serait préférable ? Actuellement, j'ai de nombreuses lignes de code pour générer les statistiques descriptives de chaque variable de caractère, car je dois exécuter le premier bloc de code (indiqué ci-dessus) pour chaque variable. Ce serait formidable si je pouvais simplement dresser la liste des variables que je souhaite utiliser et les exécuter dans le premier bloc de code.