Rlang sur votre chaise berçante

Programmer avec dplyr

Dr. Chester Ismay

Educator, Data Scientist, and R/Python Consultant

Nom étrange de colonne après summarize

grouped_mean_by_column <- function(group_col, col_to_mean) {
  joined %>% 
    group_by(!!enquo(group_col)) %>% 
    summarize(mean(!!enquo(col_to_mean)))
}
grouped_mean_by_column(group_col = year, col_to_mean = perc_cvd_crd_70)
# A tibble: 17 × 2
    year `mean(perc_cvd_crd_70)`
   <dbl>                   <dbl>
 1  2000                    15.8
 2  2001                    23.3
...
17  2016                    15.8
Programmer avec dplyr

Ce qu'on aimerait obtenir

# A tibble: 17 × 2
    year mean_of_perc_cvd_crd_70
   <dbl>                   <dbl>
 1  2000                    15.8
 2  2001                    23.3
 3  2002                    15  
 4  2003                    14.8
 5  2004                    21.1
...
15  2014                    16.7
16  2015                    16.0
17  2016                    15.8
Programmer avec dplyr

as_name() et l'opérateur morse :=

as_name()

  • Convertit un nom de colonne non cité, défusé, en chaîne

:=

  • Permet d'utiliser une variable en R à gauche dans mutate()
Programmer avec dplyr

Boucler la fonction

grouped_mean_by_column <- function(.data, group_col, col_to_mean) {

name_of_col_to_mean <- as_name(enquo(col_to_mean))
new_col_name <- paste0("mean_of_", name_of_col_to_mean)
.data %>% group_by(!!enquo(group_col)) %>%
summarize(!!new_col_name := mean(!!enquo(col_to_mean))) }
Programmer avec dplyr

Appliquer la fonction finalisée

grouped_mean_by_column(.data = joined,
                       group_col = continent,
                       col_to_mean = perc_rural_pop)
# A tibble: 5 × 2
  continent mean_of_perc_rural_pop
  <fct>                      <dbl>
1 Africa                      65.1
2 Americas                    28.1
3 Asia                        31.9
4 Europe                      30.1
5 Oceania                     14.1
Programmer avec dplyr

Nettoyer un peu le tout

grouped_mean_by_column <- function(.data, group_col, col_to_mean) {
  name_of_col_to_mean <- as_name(enquo(col_to_mean))
  new_col_name <- paste0("mean_of_", name_of_col_to_mean)
  .data %>% 
    group_by({{ group_col }}) %>% 
    summarize(!!new_col_name := mean({{ col_to_mean }}))
}

joined %>% grouped_mean_by_column(group_col = continent, col_to_mean = perc_rural_pop)
Programmer avec dplyr

Passons à la pratique !

Programmer avec dplyr

Preparing Video For Download...