我正在尝试将不同长度的简单列表转换为数据框,如下所示。我想用NaN填充缺失的值。我尝试使用ldply,rbind,as.data.frame(),但我没能把它变成我想要的格式。请帮忙。
x=c(1,2)
y=c(1,2,3)
z=c(1,2,3,4)
a=list(x,y,z)
a
[[1]]
[1] 1 2
[[2]]
[1] 1 2 3
[[3]]
[1] 1 2 3 4
输出应为:
x y z
1 1 1
2 2 2
NaN 3 3
NaN NaN 4
答案 0 :(得分:2)
使用“plyr”中的rbind.fill.matrix
让您非常接近您所寻找的内容:
> library(plyr)
> t(rbind.fill.matrix(lapply(a, t)))
[,1] [,2] [,3]
1 1 1 1
2 2 2 2
3 NA 3 3
4 NA NA 4
答案 1 :(得分:2)
这是很多代码,所以不像Ananda的解决方案那么干净,但它都是基础R:
maxl <- max(sapply(a,length))
out <- do.call(cbind, lapply(a,function(x) x[1:maxl]))
# out <- matrix(unlist(lapply(a,function(x) x[1:maxl])), nrow=maxl) #another way
out <- as.data.frame(out)
#names(out) <- names(a)
结果:
> out
V1 V2 V3
1 1 1 1
2 2 2 2
3 NA 3 3
4 NA NA 4
注意:生成的df的名称取决于列表的名称(a
),该列表当前没有名称。