Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.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 - Fatal编程技术网

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

将不同长度的列表转换为R中的数据帧或数据表,r,R,我有一份清单。这些清单长度不同 listXYZ <- list(c("x1", "x2", "x3"), c("y1", "y2", "y3", "y4", "y5", "y6"), c("z1")) 但我见过的最简单的非plyr等价物是 do.call(rbind, listXYZ) 这将通过重复较短的列表来替换空格,直到它达到最长列表的长度。较短列表中的空格应填写NA 由于列表长度不同,其他方法会产生错误消息,例如

我有一份清单。这些清单长度不同

listXYZ <- list(c("x1", "x2", "x3"),
                c("y1", "y2", "y3", "y4", "y5", "y6"),
                c("z1"))
但我见过的最简单的非plyr等价物是

  do.call(rbind, listXYZ)
这将通过重复较短的列表来替换空格,直到它达到最长列表的长度。较短列表中的空格应填写NA

由于列表长度不同,其他方法会产生错误消息,例如:

 In (function (..., deparse.level = 1)  :
 number of columns of result is not a multiple of vector length (arg 1)

有没有一种方法可以很好地扩展(对于较大的列表)?在我的例子中,列表总是有5行,但列表的长度变化很大。

索引超过向量末尾会导致
NA
,因此您可以使用它来填充NAs:

max_len <- max(sapply(listXYZ,length))
do.call("rbind",lapply(listXYZ,function(x) x[seq(max_len)]))
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,] "x1" "x2" "x3" NA   NA   NA  
[2,] "y1" "y2" "y3" "y4" "y5" "y6"
[3,] "z1" NA   NA   NA   NA   NA 

max_len您遇到的问题可以通过更新length属性来解决

len <- max(lengths(listXYZ))
t(sapply(listXYZ, `length<-`, len))
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,] "x1" "x2" "x3" NA   NA   NA  
[2,] "y1" "y2" "y3" "y4" "y5" "y6"
[3,] "z1" NA   NA   NA   NA   NA 
len
len <- max(lengths(listXYZ))
t(sapply(listXYZ, `length<-`, len))
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,] "x1" "x2" "x3" NA   NA   NA  
[2,] "y1" "y2" "y3" "y4" "y5" "y6"
[3,] "z1" NA   NA   NA   NA   NA