Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将不同长度的列表转换为数据帧_R_Dataframe - Fatal编程技术网

R 将不同长度的列表转换为数据帧

R 将不同长度的列表转换为数据帧,r,dataframe,R,Dataframe,我正在尝试将一个简单的可变长度列表转换为一个数据帧,如下所示。我想用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

我正在尝试将一个简单的可变长度列表转换为一个数据帧,如下所示。我想用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
使用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
使用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

这是大量代码,因此不像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)

注意:结果df的名称将取决于列表a的名称,而列表a目前没有名称。

这是大量代码,因此不像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)

注意:结果df的名称将取决于列表a的名称,该列表目前没有名称。

谢谢@Ananda。我是否可以保留列标题并获得数据帧而不是matrix@oostopitre当然确保使用的是命名列表,然后可以执行setNamesdata.frametrbind.fill.matrixlapplya、t、namesaAwesome。非常感谢。正是我需要的。谢谢@Ananda。我是否可以保留列标题并获得数据帧而不是matrix@oostopitre当然确保使用的是命名列表,然后可以执行setNamesdata.frametrbind.fill.matrixlapplya、t、namesaAwesome。非常感谢。正是我需要的。相关:相关: