What is the most efficient way to cast a list as a data frame?

前端 未结 7 872
悲&欢浪女
悲&欢浪女 2020-11-29 16:55

Very often I want to convert a list wherein each index has identical element types to a data frame. For example, I may have a list:

> my.list
[[1]]
[[1]]         


        
7条回答
  •  星月不相逢
    2020-11-29 17:24

    Not sure where they rank as far as efficiency, but depending on the structure of your lists there are some tidyverse options. A bonus is that they work nicely with unequal length lists:

    l <- list(a = list(var.1 = 1, var.2 = 2, var.3 = 3)
            , b = list(var.1 = 4, var.2 = 5)
            , c = list(var.1 = 7, var.3 = 9)
            , d = list(var.1 = 10, var.2 = 11, var.3 = NA))
    
    df <- dplyr::bind_rows(l)
    df <- purrr::map_df(l, dplyr::bind_rows)
    df <- purrr::map_df(l, ~.x)
    
    # all create the same data frame:
    # A tibble: 4 x 3
      var.1 var.2 var.3
        
    1     1     2     3
    2     4     5    NA
    3     7    NA     9
    4    10    11    NA
    

    And you can also mix vectors and data frames:

    library(dplyr)
    bind_rows(
      list(a = 1, b = 2),
      data_frame(a = 3:4, b = 5:6),
      c(a = 7)
    )
    
    # A tibble: 4 x 2
          a     b
       
    1     1     2
    2     3     5
    3     4     6
    4     7    NA
    

提交回复
热议问题