【问题标题】:LIst of lists in R into a data.frame - inconsistent variable names将 R 中的列表列表放入 data.frame - 变量名不一致
【发布时间】:2015-06-23 09:29:17
【问题描述】:

我有一个列表列表,我想将其转换为数据框。挑战在于列表中缺少变量名称(不是NA,但变量完全丢失)。

举例说明:来自

my_list <- list() 
my_list[[1]] <- list(a = 1, b = 2, c = 3)
my_list[[2]] <- list(a = 4, c = 6)

我想买

     a  b c
[1,] 1  2 3
[2,] 4 NA 6

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    另一种选择是

    library(reshape2)
    as.data.frame(acast(melt(my_list), L1~L2, value.var='value'))
    #  a  b c
    #1 1  2 3
    #2 4 NA 6
    

    或者正如@David Arenburg 建议的那样,melt/dcast 的包装器将是 recast

    recast(my_list, L1 ~ L2, value.var = 'value')[, -1]
    #  a  b c
    #1 1  2 3
    #2 4 NA 6
    

    【讨论】:

    • 或者recast(my_list, L1 ~ L2, value.var = 'value')[, -1],虽然-1可能很丑。
    • @DavidArenburg 谢谢,我之前试过,但没有acast 矩阵输出的选项
    • OP 明确表示他们想将其转换为数据框。
    • @DavidArenburg 谢谢,刚刚注意到。我在看他的矩阵输出
    • @akrun 您可能希望将您的好建议添加到this Q&A,这似乎是类似问题的可能标准答案。
    【解决方案2】:

    您可以使用dplyr 包中的bind_rows 函数:

    my_list <- list() 
    my_list[[1]] <- list(a = 1, b = 2, c = 3)
    my_list[[2]] <- list(a = 4, c = 6)
    dplyr::bind_rows(lapply(my_list, as.data.frame))
    

    这个输出:

    Source: local data frame [2 x 3]
      a  b c
    1 1  2 3
    2 4 NA 6
    

    【讨论】:

    • data.table::rbindlist(lapply(my_list, as.data.frame), fill = TRUE)
    • @DavidArenburg 您可能希望将您的好建议添加到this Q&A,这似乎是类似问题的可能标准答案。
    【解决方案3】:

    另一个答案,这需要将参数的类更改为 data.frames:

     library(plyr)
     lista <- list(a=1, b=2, c =3)
     listb <- list(a=4, c=6)
     lista <- as.data.frame(lista)
     listb <- as.data.frame(listb)
     my_list <- list(lista, listb)
     my_list <- do.call(rbind.fill, my_list)
     my_list
       a  b c
     1 1  2 3
     2 4 NA 6
    

    【讨论】:

    • 顺便说一句,您没有使用 OP 提供的示例数据结构。如果您正在创建一个新结构,您将使用类似于@Tutuchan 的代码而不是手动更改/创建。
    • 这是手动的方式。 OP已经提供了数据。您只需my_list &lt;- lapply(my_list, as.data.frame) ; do.call(rbind.fill, my_list)
    猜你喜欢
    • 1970-01-01
    • 2017-05-25
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 2015-11-10
    相关资源
    最近更新 更多