将不同名称的矢量列表转换为R中具有唯一列名的数据帧

时间:2017-05-24 07:30:34

标签: r

标题很冗长,但我无法找到解决此问题的方法,并希望尽可能具体。有没有简单的方法来执行以下操作:

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"

两者都不对......

提前感谢您的帮助!

1 个答案:

答案 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