我有一系列复杂的列表,我试图将其转换为R中的数据帧格式。每个列表将分别转换为一个数据帧。某些列表的某些值为空白,因此很难将列表转换为数据框。
我尝试了lapply / sapply来找到列表的最大长度,但都没有用。此外,使用do.call和unlist不会以我想要的格式提供数据(丢失列标题并将表格式化为三列,而不是许多列)。我发现以下代码可用于前5个列表:
max_list<-max(rapply(List, length))
df<-as.data.frame(rapply(List, function(x) 'length<-'(x, max_list), how="list"))
但是,当我尝试对所有列表进行循环应用时,出现以下错误。
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : arguments imply differing number of rows: 3, 0
我的最终目标是将列表中缺少值的部分转换为“ NA”。
我可以添加一些代码来避免该错误吗?还是我还有其他方法可以转换行数不同的那些列表?
编辑:
我无法在线输入输入的确切代码,但是列表是嵌套的,非常复杂。
示例输入:
iter1 <- list(item1 = 1, item2 = "a",item3="b")
iter2 <- list(item1 = 2, item2 = "c")
List <- list(iter1 = iter1, iter2 = iter2)
理想情况下,我希望将此输出作为数据框:
V1 V2 V3 V4 V5
1 a b 2 c
如上所述,我能够通过上面的代码获得此结果。但是,我不确定将代码应用于更复杂的列表后为什么会失败。
答案 0 :(得分:0)
您可以使用unlist
和参数recursive = T
。
df <- data.frame(as.list(unlist(x = List, recursive = T, use.names = F)))
names(df) <- paste0("V", 1:ncol(df))
df
V1 V2 V3 V4 V5
1 1 a b 2 c
为了便于阅读:
library(dplyr)
unlist(x = List, recursive = T, use.names = F) %>%
as.list() %>%
data.frame() %>%
setNames(nm = paste0("V", 1:ncol(.)))
V1 V2 V3 V4 V5
1 1 a b 2 c