list.1<-list(c(11L, 13L), c(9L, 12L, 14L, 15L, 16L, 19L, 20L, 22L, 25L), c(5L, 8L, 11L), c(10L, 11L, 13L, 14L, 16L))
names(list.1[[1]]) <- paste("name", c("2","6"), sep = "")
names(list.1[[2]]) <- paste("name", c("2","3", "5", "6", "7", "10", "14", "15", "16"), sep = "")
names(list.1[[3]]) <- paste("name", c("4","9", "16"), sep = "")
names(list.1[[4]]) <- paste("name", c("2","3", "5", "9", "12"), sep = "")
[1] name2 name6
11 13
[2] name2 name3 name5 name6 name7 name10 name14 name15 name16
9 12 14 15 16 19 20 22 25
[1] name1 name2 name3 name4 name5 name6 name7 name8 name9 name10 name11 etc. to name16
0 11 0 0 0 13 0 0 0 0 0
[2] 0 9 12 0 14 15 16 0 0 0 0
基本上,我希望每个类别的名称都可能(名称1-16),即使它们在列表的每个元素中都缺失。
我之前的命令不起作用但是给了我一张只有缩短列表而没有缺失值的表格:
df.list1 <- as.data.frame(t(sapply(df.list1,'[',1:16)))
这给了我16个所需的列,但没有给我丢失的列,所以我在每行中有不同的向量长度,NA填充剩余的空间(即它在前两列中堆叠的name2和name6我喜欢它们位于第二和第六列,其他列的值为零)。
有一些R魔法来做到这一点?
答案 0 :(得分:4)
我们可以将rbindlist
与fill = TRUE
一起使用来创建单个data.table
,因为最好将其存储为单个数据集,而不是{{1}中包含单行的多个数据集}
list
正如@Frank在评论中建议的那样,library(data.table)
rbindlist(lapply(list.1, as.data.frame.list), fill = TRUE)
可以采用rbindlist
list
如果我们真的想要个人rbindlist(lapply(list.1, as.list), fill=TRUE)
,一个选项是根据data.frame
创建不存在的列
names