【问题标题】:Elegant way to add variable to nested lists in R在 R 中将变量添加到嵌套列表的优雅方法
【发布时间】:2020-12-22 18:09:21
【问题描述】:

我从第三方获得嵌套列表,其中偶尔缺少字段(因为有些是可选的)。我需要将所有数据存储在一个数据框中。

因此我需要找到一种优雅的方式来强制每个嵌套列表的格式,以便我可以在单个数据框中取消列出所有内容。

让我们看看这个列表:


my.list <- list(list(col1=1, col2=2, col3=3),
                   list(col1=1, col2=2),
                   list(col2=2, col1=1),
                   list(col1=1, col2=2, col3=3, col4=4))

我希望每个嵌套列表都具有相同顺序的相同列列表(col1 到 col4)

到目前为止,我的代码真的很不优雅,根本没有矢量化,我相信它可以很好地矢量化。

for (i in (1:length(my.list))) {
  all.fields  <- unique(names(unlist(my.list)))  # all possible fields
  loc.fields  <- names(my.list[[i]])             # fields of the current list
  miss.fields <- setdiff(all.fields, loc.fields) # missing fields to add with NA
  my.list[[i]][miss.fields] <- NA}

我尝试了 purr 函数,但我无法做一些有效的事情。任何线索或提示? 谢谢!

【问题讨论】:

    标签: r list nested


    【解决方案1】:

    一个选项是unnest_wider

    library(tidyr)
    library(tibble)
    tibble(col1 = my.list) %>%
          unnest_wider(col1)
    

    bind_rows

    library(dplyr)
    bind_rows(my.list)
    # A tibble: 4 x 4
    #   col1  col2  col3  col4
    #  <dbl> <dbl> <dbl> <dbl>
    #1     1     2     3    NA
    #2     1     2    NA    NA
    #3     1     2    NA    NA
    #4     1     2     3     4
    

    如果我们想转换回list,请使用transpose from purrr

    bind_rows(my.list) %>%
         purrr::transpose
    

    【讨论】:

    • 太棒了!在一行代码中...... dplyr
    猜你喜欢
    • 2017-12-07
    • 1970-01-01
    • 2021-10-13
    • 2020-06-19
    • 1970-01-01
    • 2023-03-09
    • 2011-08-06
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多