Reputation: 1547
I would like to change this list to a data.frame:
[[1]]
AA AB
21 1
[[2]]
AA AB
19 4
[[3]]
AA AB
23 1
[[4]]
AA AB BB
15 3 6
I tried "as.data.frame(r)", but I got the following error:
Error in data.frame(c(21L, 1L), c(19L, 4L), c(23L, 1L), c(15L, 3L, 6L), :
arguments imply differing number of rows: 2, 3
How can I get something like:
AA AB BB
V1 21 1
V2 19 4
V3 23 1
V4 15 3 6
Upvotes: 7
Views: 8753
Reputation: 887951
If the list elements are named vectors,
library(stringi)
res <- as.data.frame(t(stri_list2matrix(r)))
colnames(res) <- unique(unlist(sapply(r, names)))
res
# AA AB BB
#1 21 1 <NA>
#2 19 4 <NA>
#3 23 1 <NA>
#4 15 3 6
Or if the list elements are 'data.frame'
library(data.table)
rbindlist(r1, fill=TRUE)
r <- list(structure(c(21, 1), .Names = c("AA", "AB")), structure(c(19,
4), .Names = c("AA", "AB")), structure(c(23, 1), .Names = c("AA",
"AB")), structure(c(15, 3, 6), .Names = c("AA", "AB", "BB")))
r1 <- lapply(r, as.data.frame.list)
Upvotes: 14