将嵌套列表(不等长度)转换为数据帧 [英] Converting nested list (unequal length) to data frame
问题描述
[[1]]
sk ques pval
10sfsf0.05
[[2]]
sk ques pval diff
24wwww0.110.3
[[3]]
sk ques pval diff imp
24wwww0.110.32
如何将其转换为数据帧,第一行数据$ diff [1] = NA?
以上情况将是具有5个变量和3个观察值的数据帧。
数据帧中的变量数将是列表元素中唯一名称的数量,
和列表中缺少的值将被替换为NA。
谢谢,
编辑:数据格式
list(structure(c(10,sfsf,0.05),.Names = c (sk,ques,
pval)),结构(c(24,wwww,0.11,0.3),.Names = c(sk,
ques,pval,diff)),结构(c(24,wwww,0.11,0.3,
2), (sk,ques,pval,diff,imp)))
我们得到列表
元素('indx')的长度
通过循环使用 sapply
。在最新版本的 R
中,我们可以使用长度
替换 sapply(.. ,长度)
step。我们将每个元素的长度
从'indx'(长度< $ ; -
),从而在列表
结尾处填充 NA
小于 max
长度。我们可以 rbind
列表
元素,转换为 data.frame
并更改列名。
indx< - sapply(lst,length)
#indx< length(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
#3 24 wwww 0.11 0.3 2
数据
lst < - list(structure(c(10,sfsf,0.05),.Names = c(sk,ques ,
pval)),结构(c(24,wwww,0.11,0.3),.Names = c(sk,
ques pval,diff)),结构(c(24,wwww,0.11,0.3,
2),.Names = c(sk,ques ,pval,diff,imp)))
I have a nested list; for some indices, some variables are missing.
[[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"
How can I convert this to data frame, where for the first row, data$diff[1] = NA? Above case will be data frame with 5 variables and 3 observations.
The number of variables in the data frame will be number of unique names in list elements, and missing values inside the list will be replaced with NA's.
Thank you,
EDIT : Data format
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")))
We get the length
of list
element ('indx') by looping with sapply
. In the recent version of R
, we can use lengths
to replace the sapply(.., length)
step. We change the length
of each element to the max
length from the 'indx' (length<-
) and thereby pad NA
values at the end of the list
elements with length less than the max
length. We can rbind
the list
elements, convert to data.frame
and change the column names.
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
data
lst <- 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")))
这篇关于将嵌套列表(不等长度)转换为数据帧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!