r - 如何取消嵌套列列表?

标签 r tidyverse

我有一个像:

tibble(a = c('first', 'second'), 
       b = list(c('colA' = 1, 'colC' = 2), c('colA'= 3, 'colB'=2))) 

# A tibble: 2 x 2
  a      b        
  <chr>  <list>   
1 first  <dbl [2]>
2 second <dbl [2]>

哪一个想变成这样的形式:
# A tibble: 2 x 4
  a       colA  colB  colC
  <chr>  <dbl> <dbl> <dbl>
1 first     1.   NA     2.
2 second    3.    2.   NA 

我尝试使用 unnest() ,但我遇到了从嵌套值中保留元素名称的问题。

最佳答案

您可以通过将列表列中的元素强制为按您喜欢的方式排列的数据框来做到这一点,这将很好地取消嵌套:

library(tidyverse)

tibble(a = c('first', 'second'), 
       b = list(c('colA' = 1, 'colC' = 2), c('colA'= 3, 'colB'=2))) %>% 
    mutate(b = invoke_map(tibble, b)) %>% 
    unnest()
#> # A tibble: 2 x 4
#>   a       colA  colC  colB
#>   <chr>  <dbl> <dbl> <dbl>
#> 1 first     1.    2.   NA 
#> 2 second    3.   NA     2.

但是,强制转换有点棘手,因为您不想以 2x1 数据帧结束。有多种方法可以解决这个问题,但直接的路径是 purrr::invoke_map , 调用函数 purrr::invoke (如 do.call )在列表中的每个元素上。

关于r - 如何取消嵌套列列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49889246/

相关文章:

r - 按固定分隔符分割字符向量值 - 返回数据帧,每个向量值占一行

r - 如何同时旋转多个列?

r - 从具有三列的 data.frame 创建相异矩阵

r - 根据另一个 tibble 中的值子集 tibble 列

r - 在R情节有马拟合模型与原始系列

r - 将数据从 R 传输到特定工作表和 XLSX 文件的特定范围

r - 从数据框中子集特定行和最后一行

r - 在 R 中从维基百科中提取特定表格

根据 Tidyverse 中另一列的行元素替换一列中的行元素

r - R数据帧中基于静态函数的逻辑函数