1## ---- echo = FALSE, message = FALSE-------------------------------------------
2knitr::opts_chunk$set(collapse = T, comment = "#>")
3options(tibble.print_min = 4L, tibble.print_max = 4L)
4set.seed(1014)
5
6## ----setup, message = FALSE---------------------------------------------------
7library(dplyr)
8
9## ---- results = FALSE---------------------------------------------------------
10starwars[starwars$homeworld == "Naboo" & starwars$species == "Human", ,]
11
12## ---- results = FALSE---------------------------------------------------------
13starwars %>% filter(homeworld == "Naboo", species == "Human")
14
15## -----------------------------------------------------------------------------
16df <- data.frame(x = runif(3), y = runif(3))
17df$x
18
19## ---- results = FALSE---------------------------------------------------------
20var_summary <- function(data, var) {
21  data %>%
22    summarise(n = n(), min = min({{ var }}), max = max({{ var }}))
23}
24mtcars %>%
25  group_by(cyl) %>%
26  var_summary(mpg)
27
28## ---- results = FALSE---------------------------------------------------------
29for (var in names(mtcars)) {
30  mtcars %>% count(.data[[var]]) %>% print()
31}
32
33## ---- results = FALSE---------------------------------------------------------
34summarise_mean <- function(data, vars) {
35  data %>% summarise(n = n(), across({{ vars }}, mean))
36}
37mtcars %>%
38  group_by(cyl) %>%
39  summarise_mean(where(is.numeric))
40
41## ---- results = FALSE---------------------------------------------------------
42vars <- c("mpg", "vs")
43mtcars %>% select(all_of(vars))
44mtcars %>% select(!all_of(vars))
45
46## -----------------------------------------------------------------------------
47mutate_y <- function(data) {
48  mutate(data, y = a + x)
49}
50
51## -----------------------------------------------------------------------------
52my_summary_function <- function(data) {
53  data %>%
54    filter(x > 0) %>%
55    group_by(grp) %>%
56    summarise(y = mean(y), n = n())
57}
58
59## -----------------------------------------------------------------------------
60#' @importFrom rlang .data
61my_summary_function <- function(data) {
62  data %>%
63    filter(.data$x > 0) %>%
64    group_by(.data$grp) %>%
65    summarise(y = mean(.data$y), n = n())
66}
67
68## -----------------------------------------------------------------------------
69my_summarise <- function(data, group_var) {
70  data %>%
71    group_by({{ group_var }}) %>%
72    summarise(mean = mean(mass))
73}
74
75## -----------------------------------------------------------------------------
76my_summarise2 <- function(data, expr) {
77  data %>% summarise(
78    mean = mean({{ expr }}),
79    sum = sum({{ expr }}),
80    n = n()
81  )
82}
83
84## -----------------------------------------------------------------------------
85my_summarise3 <- function(data, mean_var, sd_var) {
86  data %>%
87    summarise(mean = mean({{ mean_var }}), sd = sd({{ sd_var }}))
88}
89
90## -----------------------------------------------------------------------------
91my_summarise4 <- function(data, expr) {
92  data %>% summarise(
93    "mean_{{expr}}" := mean({{ expr }}),
94    "sum_{{expr}}" := sum({{ expr }}),
95    "n_{{expr}}" := n()
96  )
97}
98my_summarise5 <- function(data, mean_var, sd_var) {
99  data %>%
100    summarise(
101      "mean_{{mean_var}}" := mean({{ mean_var }}),
102      "sd_{{sd_var}}" := sd({{ sd_var }})
103    )
104}
105
106## -----------------------------------------------------------------------------
107my_summarise <- function(.data, ...) {
108  .data %>%
109    group_by(...) %>%
110    summarise(mass = mean(mass, na.rm = TRUE), height = mean(height, na.rm = TRUE))
111}
112
113starwars %>% my_summarise(homeworld)
114starwars %>% my_summarise(sex, gender)
115
116## -----------------------------------------------------------------------------
117my_summarise <- function(data, summary_vars) {
118  data %>%
119    summarise(across({{ summary_vars }}, ~ mean(., na.rm = TRUE)))
120}
121starwars %>%
122  group_by(species) %>%
123  my_summarise(c(mass, height))
124
125## -----------------------------------------------------------------------------
126my_summarise <- function(data, group_var, summarise_var) {
127  data %>%
128    group_by(across({{ group_var }})) %>%
129    summarise(across({{ summarise_var }}, mean))
130}
131
132## -----------------------------------------------------------------------------
133my_summarise <- function(data, group_var, summarise_var) {
134  data %>%
135    group_by(across({{ group_var }})) %>%
136    summarise(across({{ summarise_var }}, mean, .names = "mean_{.col}"))
137}
138
139## ---- results = FALSE---------------------------------------------------------
140for (var in names(mtcars)) {
141  mtcars %>% count(.data[[var]]) %>% print()
142}
143
144## ---- results = FALSE---------------------------------------------------------
145mtcars %>%
146  names() %>%
147  purrr::map(~ count(mtcars, .data[[.x]]))
148
149## ---- eval = FALSE------------------------------------------------------------
150#  library(shiny)
151#  ui <- fluidPage(
152#    selectInput("var", "Variable", choices = names(diamonds)),
153#    tableOutput("output")
154#  )
155#  server <- function(input, output, session) {
156#    data <- reactive(filter(diamonds, .data[[input$var]] > 0))
157#    output$output <- renderTable(head(data()))
158#  }
159
160