【问题标题】:How to convert nested list with different datatypes to dataframe?如何将具有不同数据类型的嵌套列表转换为数据框?
【发布时间】:2021-01-13 09:21:30
【问题描述】:

我有一个包含不同类型嵌套元素的列表

library(tidyverse)

# list to be transfomed into a dataframe/tibble
mylist <- 
  list(
    lois = list(
      hair = list(color = "orange", form = "flat"),
      sex = "female"
    )
  )

# structure
str(mylist)
#> List of 1
#>  $ lois:List of 2
#>   ..$ hair:List of 2
#>   .. ..$ color: chr "orange"
#>   .. ..$ form : chr "flat"
#>   ..$ sex : chr "female"

目标是将此列表转换为数据框/小标题。所需的输出是

# A tibble: 3 x 4
  name  value_id attribute text  
  <chr> <chr>    <chr>     <chr> 
1 lois  hair     color     orange
2 lois  hair     form      flat  
3 lois  sex      NA        female

我试过tidyr::unnest_longer()。但是因为value 列中有不同的类型,所以很难取消嵌套:

# unnest_longer does not work like this
mylist %>% 
  enframe() %>% 
  unnest_longer(col = value) %>% 
  unnest_longer(col = value)
#> Error: Can't combine `..1$value` <list> and `..2$value` <character>.

reprex package (v0.3.0) 于 2021-01-13 创建

这个问题有什么好的解决方案?

【问题讨论】:

    标签: r tidyverse tidyr


    【解决方案1】:

    一种选择是使用rrapply 库:

    rrapply(mylist, how = "melt")
    
        L1   L2    L3  value
    1 lois hair color orange
    2 lois hair  form   flat
    3 lois  sex  <NA> female
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      • 2018-03-23
      • 2020-06-22
      • 2021-03-03
      相关资源
      最近更新 更多