标题很冗长,但我无法找到解决此问题的方法,并希望尽可能具体。有没有简单的方法来执行以下操作:
test3 <- list('Row1'=c(a='a',b='b',c='c'), 'Row2'=c(a='d',var2='e',var3='f'))
desired dataframe
a b c var2 var3
Row1 a b c <NA> <NA>
Row2 d <NA> <NA> e f
这篇文章 - https://www.r-bloggers.com/converting-a-list-to-a-data-frame/ - 似乎声称我可以使用as.data.frame(test3),但是当我这样做时,我获得了:
> as.data.frame(test3)
Row1 Row2
a a d
b b e
c c f
t(as.data.frame(test3))
a b c
Row1 "a" "b" "c"
Row2 "d" "e" "f"
两者都不对......
提前感谢您的帮助!
答案 0 :(得分:4)
以下是来自rbindlist()
的{{1}}的解决方案:
data.table
列表library("data.table")
test3 <- list('Row1'=c(a='a',b='b',c='c'), 'Row2'=c(a='d',var2='e',var3='f'))
rbindlist(lapply(test3, as.list), fill=TRUE)
# a b c var2 var3
# 1: a b c NA NA
# 2: d NA NA e f
的元素是命名字符向量 - 因此首先强制列表
如果你想要你可以做的rownames:
test3
这会将data.table强制转换为数据帧,然后设置rownames 对于data.table结果,您必须为rownames定义一个额外的列:
result <- setDF(rbindlist(lapply(test3, as.list), fill=TRUE))
rownames(result) <- names(test3)
result
# a b c var2 var3
# Row1 a b c <NA> <NA>
# Row2 d <NA> <NA> e f