【问题标题】:In R, extract lists with same name from lists of list在 R 中,从列表列表中提取具有相同名称的列表
【发布时间】:2020-07-25 15:07:53
【问题描述】:

我有一个列表列表,我想提取并组合具有相同名称的列表(在下面的示例中,我想将 cof 和 pred 分开)。 (我更喜欢 tidyverse 解决方案。)

示例数据:

outputlist <- list(
    list(cof=0.12),
    list(pred=c(1, 2, 3)),
    list(cof=0.34),
    list(pred=c(4, 5, 6)),
    list(cof=0.56),
    list(pred=c(7, 8, 9))
  )

我想将它们分开,以便我拥有一个包含所有 cofs 的向量/数据框;然后是另一个具有所有预测的数据帧/向量。 我试过这个(但它没有将它们分开):

 outputlist %>% bind_cols()

提前致谢

【问题讨论】:

    标签: r tidyverse


    【解决方案1】:

    你可以试试:

    library(dplyr)
    library(purrr)
    
    outputlist %>% bind_rows() %>% split.default(names(.)) %>% map(na.omit)
    
    #$cof
    # A tibble: 3 x 1
    #    cof
    #  <dbl>
    #1  0.12
    #2  0.34
    #3  0.56
    
    #$pred
    # A tibble: 9 x 1
    #   pred
    #  <dbl>
    #1     1
    #2     2
    #3     3
    #4     4
    #5     5
    #6     6
    #7     7
    #8     8
    #9     9
    

    【讨论】:

      【解决方案2】:

      不是一个 tidyverse 解决方案,而是一个基本的 R 单线:

      lapply(split(outputlist, sapply(outputlist, names)), as.data.frame)
      #> $cof
      #>    cof cof.1 cof.2
      #> 1 0.12  0.34  0.56
      #> 
      #> $pred
      #>   pred pred.1 pred.2
      #> 1    1      4      7
      #> 2    2      5      8
      #> 3    3      6      9
      

      【讨论】:

        【解决方案3】:

        我们也可以

        library(dplyr)
        library(purrr)
        library(tidyr)
        outputlist %>%
              map_dfr(~ enframe(.x) %>%
                            unnest(c(value))) %>% 
              {split(.$value, .$name)}
        

        【讨论】:

          猜你喜欢
          • 2014-07-17
          • 2021-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-21
          相关资源
          最近更新 更多