【问题标题】:Converting a list of lists into a dataframe in R. I need the names of the list of lists as columns将列表列表转换为 R 中的数据框。我需要列表列表的名称作为列
【发布时间】:2019-06-05 22:52:14
【问题描述】:

我有一个列表列表:

list <- list(list(1,"a",2), list(3,"b",4,5), list(6,"c"))

我不知道如何显示,但是每个列表的名称都相似:image of the names of the list of lists

使得 first 列表列表中的 1 个映射到“id”,“a”映射到“code_name”,2 个映射到“project”。

second 列表中的第 4 个元素有另一个名称(由于敏感,无法在快照中显示),数字 5 映射到它。

我需要一个 df,其中名称是列,因此 first 列表中的元素(即 1、“a”和 2)成为第一行。

然后second列表中的元素(即3,"b",4,5)成为第二行。

我试过了:

df <- as.data.frame(sapply(list, unlist))

错误是:

错误(函数(...,row.names = NULL,check.rows = FALSE,check.names = TRUE,: 参数意味着不同的行数:3、4、2

我试过了:

df <- as.data.frame(list[1])

这在某种程度上是我需要的,但我需要其余的行。

在此先感谢,我对 R 很陌生,但我知道这是一个非常简单的操作,但我就是不明白。

谢谢!!!

【问题讨论】:

    标签: r dplyr tidyr data-manipulation


    【解决方案1】:

    您的问题有点含糊,但我的解释是您需要从嵌套列表中创建一个合并的 data.frame。我将分两步完成:

    1. 将每个列表转换为 data.frame,类似于您所做的
    2. rbind 这些 data.frames 在假设列应该对齐的情况下放在一起...这就是为什么我给它们起一致的名称

    我使用包 data.table 中的 rbindlist,因为它有一个很好的 fill 参数。

    解决办法如下:

    library(data.table)
    my_list <- list(list(1,"a",2), list(3,"b",4,5), list(6,"c"))
    my_list <- lapply(my_list, function(x){
      dat <- as.data.frame(x)
      names(dat) <- paste0("X", 1:ncol(dat))
      return(dat)
    })
    df <- rbindlist(my_list, fill = TRUE)
    df
    #>    X1 X2 X3 X4
    #> 1:  1  a  2 NA
    #> 2:  3  b  4  5
    #> 3:  6  c NA NA
    

    reprex package (v0.2.1) 于 2019 年 1 月 10 日创建

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多