我有一个嵌套列表;对于某些指数,缺少一些变量。
[[1]]
sk ques pval
"10" "sfsf" "0.05"
[[2]]
sk ques pval diff
"24" "wwww" "0.11" "0.3"
[[3]]
sk ques pval diff imp
"24" "wwww" "0.11" "0.3" "2"
如何将其转换为数据框,第一行数据$ diff [1] = NA? 以上情况将是具有5个变量和3个观察值的数据框。
数据框中的变量数将是列表元素中唯一名称的数量, 列表中的缺失值将替换为NA。
谢谢,
编辑:数据格式
list(structure(c("10", "sfsf", "0.05"), .Names = c("sk", "ques",
"pval")), structure(c("24", "wwww", "0.11", "0.3"), .Names = c("sk",
"ques", "pval", "diff")), structure(c("24", "wwww", "0.11", "0.3",
"2"), .Names = c("sk", "ques", "pval", "diff", "imp")))
答案 0 :(得分:14)
我们通过使用length
循环获得list
元素的sapply
(' indx')。在最新版本的R
中,我们可以使用lengths
替换sapply(.., length)
步骤。我们将每个元素的length
更改为&{39; indx' (max
),从而在length<-
元素的末尾填充NA
个值,其长度小于list
长度。我们可以max
rbind
个元素,转换为list
并更改列名称。
data.frame
indx <- sapply(lst, length)
#indx <- lengths(lst)
res <- as.data.frame(do.call(rbind,lapply(lst, `length<-`,
max(indx))))
colnames(res) <- names(lst[[which.max(indx)]])
res
# sk ques pval diff imp
#1 10 sfsf 0.05 <NA> <NA>
#2 24 wwww 0.11 0.3 <NA>
#3 24 wwww 0.11 0.3 2