我有列表,我想将其转换为数据帧
lst<-NULL
lst[[1]] <- c(1,2,3)
lst[[2]] <- c(1,2,3,4)
lst[[3]] <- c(1,2)
Run Code Online (Sandbox Code Playgroud)
我需要获取数据帧
1|2|3|NA
1|2|3|4|
1|2|NA|NA|
Run Code Online (Sandbox Code Playgroud)
一种方式 base R
do.call(rbind,lapply(lst, function(x) {length(x) <- max(lengths(lst));x}))
# [,1] [,2] [,3] [,4]
#[1,] 1 2 3 NA
#[2,] 1 2 3 4
#[3,] 1 2 NA NA
Run Code Online (Sandbox Code Playgroud)
当指定length大于矢量的长度时,NA将填充空白空间的值.我们在列表中找到最长的向量max(lengths(lst)).然后将其分配给每个向量和rbind列表.如果您想将数据框作为输出,则可以使用do.call(rbind.data.frame, ..).
该功能lengths已添加到R 3.2.0.它相当于sapply(lst, length).
第二种方法
如果您认为转置矩阵不会影响性能,您还可以尝试:
t(sapply(lst, function(x) {length(x) <- max(lengths(lst));x}))
# [,1] [,2] [,3] [,4]
# [1,] 1 2 3 NA
# [2,] 1 2 3 4
# [3,] 1 2 NA NA
Run Code Online (Sandbox Code Playgroud)