``
library(tidyverse)
[30m-- [1mAttaching packages[22m --------------------------------------- tidyverse 1.2.1 --[39m
[30m[32mv[30m [34mggplot2[30m 2.2.1 [32mv[30m [34mpurrr [30m 0.2.4
[32mv[30m [34mtibble [30m 1.4.2 [32mv[30m [34mdplyr [30m 0.7.4
[32mv[30m [34mtidyr [30m 0.8.0 [32mv[30m [34mstringr[30m 1.3.0
[32mv[30m [34mreadr [30m 1.1.1 [32mv[30m [34mforcats[30m 0.3.0[39m
[30m-- [1mConflicts[22m ------------------------------------------ tidyverse_conflicts() --
[31mx[30m [34mdplyr[30m::[32mfilter()[30m masks [34mstats[30m::filter()
[31mx[30m [34mdplyr[30m::[32mlag()[30m masks [34mstats[30m::lag()[39m
new_df <- function() {
tribble(
~ name, ~ age,
"Reed", 14L,
"Wesley", 12L,
"Eli", 12L,
"Toby", 1L
)
}
df <- new_df()
new_df() %>%
mutate(
eyes = 2L,
snack = c("chips", "cheese"),
uname = toupper(name)
)
Error in mutate_impl(.data, dots) :
Column `snack` must be length 4 (the number of rows) or one, not 2
new_df() %>%
mutate(
eyes = 2L,
snack = c("chips", "cheese", "mixed nuts", "nerf bullets"),
uname = toupper(name)
)
[38;5;246m# A tibble: 4 x 5[39m
name age eyes snack uname
[3m[38;5;246m<chr>[39m[23m [3m[38;5;246m<int>[39m[23m [3m[38;5;246m<int>[39m[23m [3m[38;5;246m<chr>[39m[23m [3m[38;5;246m<chr>[39m[23m
[38;5;250m1[39m Reed 14 2 chips REED
[38;5;250m2[39m Wesley 12 2 cheese WESLEY
[38;5;250m3[39m Eli 12 2 mixed nuts ELI
[38;5;250m4[39m Toby 1 2 nerf bullets TOBY
paste(df$name[1], "is", df$age[1], "years old")
[1] "Reed is 14 years old"
n <- nrow(df)
s <- vector(mode = "character", length = n)
for (i in seq_len(n)) {
s[i] <- paste(df$name[i], "is", df$age[i], "years old")
}
s
[1] "Reed is 14 years old" "Wesley is 12 years old"
[3] "Eli is 12 years old" "Toby is 1 years old"
paste(df$name, "is", df$age, "years old")
[1] "Reed is 14 years old" "Wesley is 12 years old"
[3] "Eli is 12 years old" "Toby is 1 years old"
str_glue_data(df, "{name} is {age} years old")
Reed is 14 years old
Wesley is 12 years old
Eli is 12 years old
Toby is 1 years old
df %>%
mutate(sentence = str_glue("{name} is {age} years old"))
[38;5;246m# A tibble: 4 x 3[39m
name age sentence
[3m[38;5;246m<chr>[39m[23m [3m[38;5;246m<int>[39m[23m [3m[38;5;246m<chr>[39m[23m
[38;5;250m1[39m Reed 14 Reed is 14 years old
[38;5;250m2[39m Wesley 12 Wesley is 12 years old
[38;5;250m3[39m Eli 12 Eli is 12 years old
[38;5;250m4[39m Toby 1 Toby is 1 years old
df_list <- list(
iris = head(iris, 2),
mtcars = head(mtcars, 3)
)
df_list
$`iris`
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
$mtcars
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
nrow(df_list)
NULL
library(purrr)
map(df_list, nrow)
$`iris`
[1] 2
$mtcars
[1] 3
map(df_list, ~ nrow(.x))
$`iris`
[1] 2
$mtcars
[1] 3
x <- list(
list(name = "sue", number = 1, veg = c("onion", "carrot")),
list(name = "doug", number = 2, veg = c("potato", "beet"))
)
x
[[1]]
[[1]]$`name`
[1] "sue"
[[1]]$number
[1] 1
[[1]]$veg
[1] "onion" "carrot"
[[2]]
[[2]]$`name`
[1] "doug"
[[2]]$number
[1] 2
[[2]]$veg
[1] "potato" "beet"
tibble(
name = map_chr(x, "name"),
number = map_dbl(x, "number"),
veg = map(x, "veg")
)
[38;5;246m# A tibble: 2 x 3[39m
name number veg
[3m[38;5;246m<chr>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<list>[39m[23m
[38;5;250m1[39m sue 1 [38;5;246m<chr [2]>[39m
[38;5;250m2[39m doug 2 [38;5;246m<chr [2]>[39m
as.tibble(iris)
[38;5;246m# A tibble: 150 x 5[39m
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
[3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<fct>[39m[23m
[38;5;250m 1[39m 5.1 3.5 1.4 0.2 setosa
[38;5;250m 2[39m 4.9 3 1.4 0.2 setosa
[38;5;250m 3[39m 4.7 3.2 1.3 0.2 setosa
[38;5;250m 4[39m 4.6 3.1 1.5 0.2 setosa
[38;5;250m 5[39m 5 3.6 1.4 0.2 setosa
[38;5;250m 6[39m 5.4 3.9 1.7 0.4 setosa
[38;5;250m 7[39m 4.6 3.4 1.4 0.3 setosa
[38;5;250m 8[39m 5 3.4 1.5 0.2 setosa
[38;5;250m 9[39m 4.4 2.9 1.4 0.2 setosa
[38;5;250m10[39m 4.9 3.1 1.5 0.1 setosa
[38;5;246m# ... with 140 more rows[39m
iris %>%
group_by(Species) %>%
summarise(pl_avg = mean(Petal.Length), pw_avg = mean(Petal.Width))
[38;5;246m# A tibble: 3 x 3[39m
Species pl_avg pw_avg
[3m[38;5;246m<fct>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<dbl>[39m[23m
[38;5;250m1[39m setosa 1.46 0.246
[38;5;250m2[39m versicolor 4.26 1.33
[38;5;250m3[39m virginica 5.55 2.03
What if you want to return summaries that are not just a single number?
iris %>%
group_by(Species) %>%
summarise(pl_qtile = quantile(Petal.Length, c(0.25, 0.5, 0.75)))
Error in summarise_impl(.data, dots) :
Column `pl_qtile` must be length 1 (a summary value), not 3
iris %>%
group_by(Species) %>%
summarise(pl_qtile = list(quantile(Petal.Length, c(0.25, 0.5, 0.75))))
[38;5;246m# A tibble: 3 x 2[39m
Species pl_qtile
[3m[38;5;246m<fct>[39m[23m [3m[38;5;246m<list>[39m[23m
[38;5;250m1[39m setosa [38;5;246m<dbl [3]>[39m
[38;5;250m2[39m versicolor [38;5;246m<dbl [3]>[39m
[38;5;250m3[39m virginica [38;5;246m<dbl [3]>[39m
iris %>%
group_by(Species) %>%
summarise(pl_qtile = list(quantile(Petal.Length, c(0.25, 0.5, 0.75)))) %>%
mutate(pl_qtile = map(pl_qtile, enframe, name = "quantile")) %>%
unnest() %>%
mutate(quantile = factor(quantile)) %>%
spread(quantile, value)
[38;5;246m# A tibble: 3 x 4[39m
Species `25%` `50%` `75%`
[3m[38;5;246m<fct>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<dbl>[39m[23m
[38;5;250m1[39m setosa 1.4 1.5 1.58
[38;5;250m2[39m versicolor 4 4.35 4.6
[38;5;250m3[39m virginica 5.1 5.55 5.88
df <- tribble(
~ name, ~ t1, ~t2, ~t3,
"Abby", 1, 2, 3,
"Bess", 4, 5, 6,
"Carl", 7, 8, 9
)
df
[38;5;246m# A tibble: 3 x 4[39m
name t1 t2 t3
[3m[38;5;246m<chr>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<dbl>[39m[23m
[38;5;250m1[39m Abby 1 2 3
[38;5;250m2[39m Bess 4 5 6
[38;5;250m3[39m Carl 7 8 9
df %>%
mutate(t_sum = rowSums(select_if(., is.numeric)))
[38;5;246m# A tibble: 3 x 5[39m
name t1 t2 t3 t_sum
[3m[38;5;246m<chr>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<dbl>[39m[23m
[38;5;250m1[39m Abby 1 2 3 6
[38;5;250m2[39m Bess 4 5 6 15
[38;5;250m3[39m Carl 7 8 9 24
df %>%
mutate(t_avg = rowMeans(select(., -name)))
[38;5;246m# A tibble: 3 x 5[39m
name t1 t2 t3 t_avg
[3m[38;5;246m<chr>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<dbl>[39m[23m
[38;5;250m1[39m Abby 1 2 3 2
[38;5;250m2[39m Bess 4 5 6 5
[38;5;250m3[39m Carl 7 8 9 8
df %>%
mutate(t_avg = rowSums(select(., c(t1, t3))))
[38;5;246m# A tibble: 3 x 5[39m
name t1 t2 t3 t_avg
[3m[38;5;246m<chr>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<dbl>[39m[23m [3m[38;5;246m<dbl>[39m[23m
[38;5;250m1[39m Abby 1 2 3 4
[38;5;250m2[39m Bess 4 5 6 10
[38;5;250m3[39m Carl 7 8 9 16