如何使用 purrr 来旋转嵌套数据框?

How can I use purrr to pivot a nested dataframe?

下面的代码创建了数据框的简化版本,并根据未嵌套的版本说明了我想要的最终结果 (df_wider)。我的问题是:如何使用 purrr 从嵌套版本 (nested_df) 获得相同的最终结果 (df_wider)?

library(tidyverse)

df <- tibble(id_01 = c(rep("01", 3), rep("02", 3)),
             a = (c("a", "a", "b", "c", "c", "d")),
             b = letters[7:12],
             id_02 = rep(c(1, 2, 1), 2)
             )

df_wider <- pivot_wider(df,
                        id_cols = c(id_01, a),
                        names_from = id_02,
                        values_from = b,
                        names_sep = "_"
)

nested_df <- nest(df, data = -id_01)

需要说明的是,我试图在嵌套数据帧时(即,在取消嵌套之前)进行旋转。

我们可以在 dplyr::mutate():

中使用 purrr::map()
library(tidyverse)

df <- tibble(
  id_01 = c(rep("01", 3), rep("02", 3)),
  a = (c("a", "a", "b", "c", "c", "d")),
  b = letters[7:12],
  id_02 = rep(c(1, 2, 1), 2)
)

nested_df <- df %>%
  nest(data = -id_01) %>% 
  mutate(data = map(data, ~ .x %>%
    pivot_wider(
      id_cols = a,
      names_from = id_02,
      values_from = b
    )))

nested_df
#> # A tibble: 2 x 2
#>   id_01 data            
#>   <chr> <list>          
#> 1 01    <tibble [2 x 3]>
#> 2 02    <tibble [2 x 3]>

nested_df %>% 
  unnest(data)
#> # A tibble: 4 x 4
#>   id_01 a     `1`   `2`  
#>   <chr> <chr> <chr> <chr>
#> 1 01    a     g     h    
#> 2 01    b     i     <NA> 
#> 3 02    c     j     k    
#> 4 02    d     l     <NA>

reprex package (v1.0.0)

于 2021-03-26 创建