将列表列表转换为R中的数据框。我需要列表列表的名称作为列

时间:2019-01-11 01:54:15

标签: r dplyr tidyr data-manipulation

我有一个列表列表:

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”。

第二个 列表中的第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的新手,但是我知道这是一个非常简单的操作,但我还是无法理解。

谢谢!

1 个答案:

答案 0 :(得分:0)

您的问题有点模糊,但是我的解释是,您需要从嵌套列表中创建一个合并的data.frame。我分两个步骤进行操作:

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

我使用软件包rbindlist中的data.table,因为它有一个不错的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-01-10创建