所以这里的关键是要映射的列表实际上是列名,而不是列或数据帧本身。这里有一个粗略的、现成的方法,尽管它非常脆弱(数据帧和分组列都是硬编码到函数中的)。如果您需要做任何更有趣的事情,可以查看dplyr vignette的编程。
library(tidyverse)
to_spread <- mtcars %>%
group_by(gear, carb) %>%
summarise_all(mean)
map(
.x = colnames(to_spread)[3:11],
.f = function(col) {
to_spread %>%
select(gear, carb, col) %>%
spread(gear, col)
}
) %>%
set_names(colnames(to_spread)[3:11]) %>%
head(3)
#> $mpg
#> # A tibble: 6 x 4
#> carb `3` `4` `5`
#> <dbl> <dbl> <dbl> <dbl>
#> 1 1 20.3 29.1 NA
#> 2 2 17.2 24.8 28.2
#> 3 3 16.3 NA NA
#> 4 4 12.6 19.8 15.8
#> 5 6 NA NA 19.7
#> 6 8 NA NA 15
#>
#> $cyl
#> # A tibble: 6 x 4
#> carb `3` `4` `5`
#> <dbl> <dbl> <dbl> <dbl>
#> 1 1 5.33 4 NA
#> 2 2 8 4 4
#> 3 3 8 NA NA
#> 4 4 8 6 8
#> 5 6 NA NA 6
#> 6 8 NA NA 8
#>
#> $disp
#> # A tibble: 6 x 4
#> carb `3` `4` `5`
#> <dbl> <dbl> <dbl> <dbl>
#> 1 1 201. 84.2 NA
#> 2 2 346. 121. 108.
#> 3 3 276. NA NA
#> 4 4 416. 164. 351
#> 5 6 NA NA 145
#> 6 8 NA NA 301
于2018年6月22日由
reprex package
(v0.2.0)。