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