【问题标题】:Convert a list to data.frame with multiple columns in R [duplicate]在R中将列表转换为具有多列的data.frame [重复]
【发布时间】:2020-11-22 20:43:34
【问题描述】:

我有一个看起来像这样的列表

[[1]]
1 2
[[2]]
10 20 30 
[[3]]
4

我想把它转换成这样的数据框

column1 column2 column3
   1       2      NA
   10      20     30
   4       NA      NA

非常感谢任何帮助

【问题讨论】:

    标签: r list dataframe tidyverse


    【解决方案1】:

    一个选项是获取list元素的lengths,获取max长度,在长度小于max长度的末尾填充NA,dbindlist元素

    mx <- max(lengths(lst1))
    out <- do.call(rbind.data.frame, lapply(lst1, `length<-`, mx))
    names(out) <- paste0('column', 1:3)
    out
    #  column1 column2 column3
    #1       1       2      NA
    #2      10      20      30
    #3       4      NA      NA
    

    数据

    lst1 <- list(1:2, c(10, 20, 30), 4)
    

    【讨论】:

    • 这看起来很整洁@akrun 谢谢。我会尝试将其调整为我的 data.frame,然后我会为您的答案添加重击
    【解决方案2】:

    另一个选项,如@akrun 回答所介绍的数据,将是:

    library(purrr)
    library(dplyr)
    lst1 %>%
        map_dfr(~as.data.frame(t(as.matrix(.)))) %>%
        rename_with(~sub("V", "column",.))
    

    它也可以使用unlistas.numeric 而不是as.matrix

    【讨论】:

    • 这是一个非常简洁的解决方案@iago。我很喜欢。它非常适合 lst1 但不幸的是,在我的长列表中,我遇到了这个错误“错误:参数 1 必须有名称。”。让我烦恼的是,我不明白哪个应该有名字。谢谢你的回答
    • 我应该看看这样的列表。您可以尝试使用traceback() 调试错误
    猜你喜欢
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 2020-07-17
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    相关资源
    最近更新 更多