R-kodning i gungstolen

Programmering med dplyr

Dr. Chester Ismay

Educator, Data Scientist, and R/Python Consultant

Konstigt kolumnnamn från 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
Programmering med dplyr

Vad vi vill ha istället

# 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
Programmering med dplyr

as_name() och valrossoperatorn :=

as_name()

  • Konverterar ett icke-citerat, defuserat kolumnnamn till en sträng

:=

  • Tillåter att en variabel i R används på vänster sida i mutate()
Programmering med dplyr

Färdigställer funktionen

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))) }
Programmering med dplyr

Funktionen i bruk

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
Programmering med dplyr

Städar upp koden lite

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)
Programmering med dplyr

Nu kör vi en övning!

Programmering med dplyr

Preparing Video For Download...