0
votes

R Passer le vecteur du groupement vars à Purrr :: Carte

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)
  )


1 commentaires

3 Réponses :


0
votes

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


1 commentaires

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.



0
votes

Vous pouvez remodeler le jeu de données à l'aide de pivot_longer puis compte xxx


1 commentaires

Merci - je vois qu'il y a plus d'une façon de résoudre ce problème.



0
votes

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
#....


2 commentaires

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 () . Aussi, j'ai utilisé map_df () qui m'a donné la sortie souhaitée dans un seul cadre de données.


Mise à jour: group_by_at () est maintenant remplacé dans dplyr 1.0.0. J'ai testé group_by (à travers (.x)) dans cette solution et fonctionne et produit une sortie identique.