Rlang w wygodnym fotelu

Programowanie z dplyr

Dr. Chester Ismay

Educator, Data Scientist, and R/Python Consultant

Niestandardowa nazwa kolumny w 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
Programowanie z dplyr

Oczekiwany wynik

# 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
Programowanie z dplyr

as_name() i operator morsa :=

as_name()

  • Konwertuje nieujętą w cudzysłów, defused nazwę kolumny na ciąg znaków

:=

  • Umożliwia użycie zmiennej po lewej stronie w mutate()
Programowanie z dplyr

Budowa funkcji krok po kroku

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))) }
Programowanie z dplyr

Zastosowanie gotowej funkcji

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
Programowanie z dplyr

Porządkowanie funkcji

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)
Programowanie z dplyr

Czas na ćwiczenia!

Programowanie z dplyr

Preparing Video For Download...