Voici le code qui se lit dans un ensemble de données distant et prépare quatre tableaux récapitulatifs montrant des chiffres pour chaque catégorie des variables démographiques de genre, d'éducation, d'ethnie / course et de la région géographique:
census_match_cat_count <- var_order_census_match %>% map( ~ census_match_input %>% group_by(!!.x) %>% summarize(n_census = n()) %>% rename(demo_cat = !!.x) %>% mutate(demo_var = .x) %>% relocate(demo_var, .before = demo_cat) )
3 Réponses :
Vous étiez presque là, mais vous devez convertir le nom de la variable en un symbole à utiliser avec group_by () code>. Notez que dans le code ci-dessous
compteur () code> est un raccourci pour
group_by () code> +
résumée (n = n ()) code>.
library(dplyr)
library(purrr)
vars <- c("gender", "educ", "ethnic", "region")
vars %>%
map(~ census_match_input %>%
count(!!sym(.x)) %>%
rename(demo_cat = !!.x) %>%
mutate(demo_var = .x) %>%
relocate(demo_var))
[[1]]
# A tibble: 2 x 3
demo_var demo_cat n
<chr> <chr> <int>
1 gender female 524
2 gender male 476
[[2]]
# A tibble: 4 x 3
demo_var demo_cat n
<chr> <chr> <int>
1 educ BA_plus 311
2 educ HS_grad 247
3 educ no_HS 133
4 educ some_college 309
[[3]]
# A tibble: 5 x 3
demo_var demo_cat n
<chr> <chr> <int>
1 ethnic asian 48
2 ethnic black 146
3 ethnic hispanic 252
4 ethnic other 64
5 ethnic white 490
[[4]]
# A tibble: 4 x 3
demo_var demo_cat n
<chr> <chr> <int>
1 region midwest 218
2 region northeast 173
3 region south 367
4 region west 242
Merci - je me sentais comme si j'étais très proche mais vous trouvez la bonne façon de résoudre ce problème avec NSE.
Vous pouvez remodeler le jeu de données à l'aide de pivot_longer code> puis
compte code>
Merci - je vois qu'il y a plus d'une façon de résoudre ce problème.
Vous pouvez également faire cela sans évaluation non standard, nommer les noms de colonnes comme caractère.
library(dplyr) var_order_census_match <- c("gender", "educ", "ethnic", "region") purrr::map(var_order_census_match, ~census_match_input %>% group_by_at(.x) %>% summarise(n = n()) %>% rename(demo_cat = .x) %>% mutate(demo_var = .x) %>% relocate(demo_var)) #[[1]] # A tibble: 2 x 3 # demo_var demo_cat n # <chr> <chr> <int> #1 gender female 524 #2 gender male 476 #[[2]] # A tibble: 4 x 3 # demo_var demo_cat n # <chr> <chr> <int> #1 educ BA_plus 311 #2 educ HS_grad 247 #3 educ no_HS 133 #4 educ some_college 309 #....
Merci - J'ai choisi votre solution parce que c'est le plus proche de mon code d'origine, et parce que cela m'a donné l'occasion d'en savoir plus sur la version SE de group_by () code>. Aussi, j'ai utilisé
map_df () code> qui m'a donné la sortie souhaitée dans un seul cadre de données.
Mise à jour: group_by_at () code> est maintenant remplacé dans
dplyr code> 1.0.0. J'ai testé
group_by (à travers (.x)) code> dans cette solution et fonctionne et produit une sortie identique.
Dupliqué possible de Stackoverflow.com/questions/62471927/ ... ?