我有一个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)
Run Code Online (Sandbox Code Playgroud)
现在,假设我想要一个包含5列和3行的数据框,其中每列代表五个元素中的一个a,每行代表一个子列表.因此,输出应该是
output
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
[3,] 11 12 13 14 15
Run Code Online (Sandbox Code Playgroud)
一个基本的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
Run Code Online (Sandbox Code Playgroud)
您还可以使用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
Run Code Online (Sandbox Code Playgroud)