R 在子列表中选取元素并使其成为数据框中的列

R 在子列表中选取元素并使其成为数据框中的列,r,list,sublist,R,List,Sublist,我有一个2000个子列表的列表,每个子列表有7个元素,每个元素的形式相同。其中第五个元素是一个包含40个元素的数字向量。我的目标是获得一个包含2000行和40列的数据帧,其中每列表示2000个子列表第五个元素中40个元素中的一个。以下是一个缩小规模的示例: sub_list_1 <- list(a = c(1:5), b = "b") sub_list_2 <- list(a = c(6:10), b = "b") sub_list_3 <- list(a = c(11:15)

我有一个2000个子列表的列表,每个子列表有7个元素,每个元素的形式相同。其中第五个元素是一个包含40个元素的数字向量。我的目标是获得一个包含2000行和40列的数据帧,其中每列表示2000个子列表第五个元素中40个元素中的一个。以下是一个缩小规模的示例:

sub_list_1 <- list(a = c(1:5), b = "b")
sub_list_2 <- list(a = c(6:10), b = "b")
sub_list_3 <- list(a = c(11:15), b = "b")
top_list <- list(sub_list_1, sub_list_2, sub_list_3)

一种基本的R方法是使用
sapply
来提取值,当每个列表提取的元素具有相同的长度时,该方法返回一个矩阵,将结果转置为
t

 t(sapply(top_list, "[[", 1))
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
[3,]   11   12   13   14   15
您还可以使用
as.data.frame
将矩阵转换为data.frame

as.data.frame(t(sapply(top_list, "[[", 1)))
  V1 V2 V3 V4 V5
1  1  2  3  4  5
2  6  7  8  9 10
3 11 12 13 14 15

一种基本的R方法是使用
sapply
来提取值,当每个列表提取的元素具有相同的长度时,该方法返回一个矩阵,将结果转置为
t

 t(sapply(top_list, "[[", 1))
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
[3,]   11   12   13   14   15
您还可以使用
as.data.frame
将矩阵转换为data.frame

as.data.frame(t(sapply(top_list, "[[", 1)))
  V1 V2 V3 V4 V5
1  1  2  3  4  5
2  6  7  8  9 10
3 11 12 13 14 15

另一种方法是这个

do.call(rbind, sapply(top_list, `[`, 1))

首先,
sapply
提取每个列表的第一个向量,然后
do。调用
rbinds
这些向量到
矩阵中
另一种方法是这种方法

do.call(rbind, sapply(top_list, `[`, 1))

首先,
sapply
提取每个列表的第一个向量,然后
do。调用
rbinds
这些向量到
矩阵中
另一种不使用循环更有效的方法是取消列表并创建矩阵:

vals <- unlist(top_list)
matrix(as.numeric(vals[vals!='b']),ncol=length(top_list[[1]]$a),byrow = TRUE)

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
[3,]   11   12   13   14   15

vals另一种不使用循环更有效的方法是取消列表并创建矩阵:

vals <- unlist(top_list)
matrix(as.numeric(vals[vals!='b']),ncol=length(top_list[[1]]$a),byrow = TRUE)

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
[3,]   11   12   13   14   15
vals