【问题标题】:How I can make a data frame with a list of sublist with different lengths in R?如何在 R 中使用具有不同长度的子列表列表制作数据框?
【发布时间】:2021-04-07 22:33:41
【问题描述】:

我在 R 中有一个子列表列表。但是,这些列表有不同的长度。我想用这个子列表创建一个数据框。然而,挑战在于每个子列表的第一项必须为子列表的其他项目重复。第一项是其他子列表子项的关键变量。我的清单是这样的:

lista <- list(list("data pregão 16187465 1 27/08/2020 clear", 
                   "1-bovespa c vista itausa pn ed n1 100 9,67 967,00 d"),
              list("data pregão 17212976 1 10/09/2020 clear",
                   "1-bovespa v vista itausa pn ed n1 100 9,40 940,00 c"),
              list("data pregão 19759871 1 19/10/2020 clear",
                  c("1-bovespa c fracionario magaz luiza on eb nm # 1 25,76 25,76 d", "1-bovespa c fracionario magaz luiza on eb nm # 9 25,76 231,84 d", "1-bovespa c fracionario magaz luiza on eb nm 40 25,76 1.030,40 d", "1-bovespa c fracionario mrv on ed nm 40 18,14 725,60 d")))

【问题讨论】:

    标签: r list dataframe variables key


    【解决方案1】:

    分别提取第一个和第二个元素,通过使用map在外部列表上循环创建tibble,并使用后缀_dfr将它们绑定在一起

    library(purrr)
    map_dfr(lista, ~ tibble(col1 = .x[[1]], col2 = .x[[2]]))
    

    -输出

    # A tibble: 6 x 2
    #  col1                                    col2                                                            
    #  <chr>                                   <chr>                                                           
    #1 data pregão 16187465 1 27/08/2020 clear 1-bovespa c vista itausa pn ed n1 100 9,67 967,00 d             
    #2 data pregão 17212976 1 10/09/2020 clear 1-bovespa v vista itausa pn ed n1 100 9,40 940,00 c             
    #3 data pregão 19759871 1 19/10/2020 clear 1-bovespa c fracionario magaz luiza on eb nm # 1 25,76 25,76 d  
    #4 data pregão 19759871 1 19/10/2020 clear 1-bovespa c fracionario magaz luiza on eb nm # 9 25,76 231,84 d 
    #5 data pregão 19759871 1 19/10/2020 clear 1-bovespa c fracionario magaz luiza on eb nm 40 25,76 1.030,40 d
    #6 data pregão 19759871 1 19/10/2020 clear 1-bovespa c fracionario mrv on ed nm 40 18,14 725,60 d          
    

    或者可以使用bind_colsmap

    library(dplyr)
    map_dfr(lista,  bind_cols)
    

    或使用base R

    do.call(rbind, lapply(lista, function(x) 
            as.data.frame(x, col.names = c('col1', 'col2'))))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 2019-12-21
      • 2019-02-26
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多