【发布时间】:2018-04-18 12:18:13
【问题描述】:
我想获得一个数据框中许多group_by_点获得的汇总小标题列表。
require(tidyverse)
data(mtcars)
# create dots of groups for dplyr::group_by_ function
dots1 <- lapply(c("am", "gear"), as.symbol)
dots2 <- lapply(c("am", "carb"), as.symbol)
l <- list(dots1, dots2)
# group_by then summarise for one dots
mtcars %>%
group_by_(.dots = dots1) %>%
summarise(cyl_mean = mean(mpg),
cyl_sd = sd(mpg))
如何编写代码以获取与 n 个点匹配的 n 个小标题列表?使用purrr::map() 的东西?
我想避免复制粘贴代码,因为我会使用很多点。
我试过了
> mtcars %>% group_by_(.dots = l)
但它给了
错误:无法将列表转换为 quosure
我可以使用for 循环获得所需的输出,但我想知道是否有不使用for 循环的替代方法。
list_groups <- list()
for (i in 1:length(l)) {
res <- mtcars %>%
group_by_(.dots = l[[i]]) %>%
summarise(cyl_mean = mean(mpg),
cyl_sd = sd(mpg))
list_groups[[i]] <- res
}
list_groups
[[1]]
# A tibble: 4 x 4
# Groups: am [?]
am gear cyl_mean cyl_sd
<dbl> <dbl> <dbl> <dbl>
1 0 3.00 16.1 3.37
2 0 4.00 21.0 3.07
3 1.00 4.00 26.3 5.41
4 1.00 5.00 21.4 6.66
[[2]]
# A tibble: 9 x 4
# Groups: am [?]
am carb cyl_mean cyl_sd
<dbl> <dbl> <dbl> <dbl>
1 0 1.00 20.3 1.93
2 0 2.00 19.3 3.74
3 0 3.00 16.3 1.05
4 0 4.00 14.3 3.36
5 1.00 1.00 29.1 5.06
6 1.00 2.00 27.0 4.30
7 1.00 4.00 19.3 3.00
8 1.00 6.00 19.7 NaN
9 1.00 8.00 15.0 NaN
【问题讨论】: