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
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")))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With