R列表到数据帧

Nik*_*lay 1 r

我有列表,我想将其转换为数据帧

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)

Pie*_*une 6

一种方式 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)