我有一个列表列表:
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的新手,但是我知道这是一个非常简单的操作,但我还是无法理解。
谢谢!
答案 0 :(得分:0)
您的问题有点模糊,但是我的解释是,您需要从嵌套列表中创建一个合并的data.frame。我分两个步骤进行操作:
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创建