首页 > 解决方案 > 在 map() 中使用 spread()

问题描述

我正在努力在 map() 函数中使用 spread() 。这是一个示例数据:

data1 <- tibble(size = c("1", "2", "3", "4"),
               color = c("blue", "green", "yellow", "black"))

data2 <- tibble(size = c("7", "3", "10", "1"),
                color = c("orange", "yellow", "red", "white"))

dataList <- list(data1, data2)

我想用我的列表实现的目标与使用单个 tibble 的目标类似:

spread(data1, size, color)

# A tibble: 1 x 4
  `1`   `2`   `3`    `4`  
  <chr> <chr> <chr>  <chr>
1 blue  green yellow black

但是我想以某种方式使用 map() 将这个 spread() 应用到我列表的两个小标题上。但我找不到正确的方法来做到这一点......知道吗?非常感谢你的帮助!

标签: rtidyrpurrr

解决方案


使用tidyr::pivot_widersincetidyr::spread已折旧:

data1 <- tibble::tibble(size = c("1", "2", "3", "4"),
        color = c("blue", "green", "yellow", "black"))

data2 <- tibble::tibble(size = c("7", "3", "10", "1"),
        color = c("orange", "yellow", "red", "white"))

dataList <- list(data1, data2)

purrr::map(.x = dataList, .f = ~tidyr::pivot_wider(.x, names_from = size, values_from = color) )
#> [[1]]
#> # A tibble: 1 x 4
#>   `1`   `2`   `3`    `4`  
#>   <chr> <chr> <chr>  <chr>
#> 1 blue  green yellow black
#> 
#> [[2]]
#> # A tibble: 1 x 4
#>   `7`    `3`    `10`  `1`  
#>   <chr>  <chr>  <chr> <chr>
#> 1 orange yellow red   white

推荐阅读