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/ ... ?