首页 > 解决方案 > 如何将带有列表列表的行的表转换为具有更多行和更多列的data.frame?

问题描述

如何将“源”转换为“结果”:

l1 <- list(list(list(item=list(category="item category",name="item name"))))
l2 <- list(
  list(
    list(
      item=list(category="item category1",name="item name1"),
      item=list(category="item category2",name="item name2")
      )))
source <- tribble(
  ~order, ~tablePart,
  1,l1,
  2,l2
  )

result <- tribble(
  ~order, ~category, ~name,
  1,"item category","item name",
  2,"item category1","item name1",
  2,"item category2","item name2"
)

标签: r

解决方案


由于您有一个嵌套列表列,我们可以使用flatten_dfcthen unnest

library(dplyr)
library(purrr)
library(tidyr)

source %>% 
  mutate(tablePart = map(tablePart, flatten_dfc)) %>% 
  unnest()
  order category      name      category...1   name...2   category...3   name...4  
  <dbl> <chr>         <chr>     <chr>          <chr>      <chr>          <chr>     
1     1 item category item name NA             NA         NA             NA        
2     2 NA            NA        item category1 item name1 item category2 item name2

推荐阅读