在 R 中将列表转换为向量(第一个向量由列表的每个元素的第一个元素组成,依此类推)



我想知道如何在R中将列表转换为向量,其中每个向量都由列表元素的一个元素组成。特别是,我希望第一个向量由列表中每个元素的第一个元素组成。我希望第二个向量由列表中每个元素的第 2 个元素组成。更一般地说,我希望第 n 个向量由列表中每个元素的第 n 个元素组成。因此,n 将等于列表中最长元素的长度。

例如,假设我们有:

mylist = list(c("a", "b"), c(character(0)), c(1, 2, 3))

我想创建三个向量,其中

first_vector = c("a", NA, 1)
second_vector = c("b", NA, 2)
third_vector = c(NA, NA, 3)

正如您在上面的例子中看到的,由于缺少值,我可能会有额外的并发症。

提前非常感谢您的帮助!

-文森特

通常,在全局环境中创建无穷无尽的对象是一种不好的做法,并且由于所有向量的长度都相同,因此您可以只创建一个矩阵

indx <- max(lengths(mylist))
sapply(mylist, `length<-`, indx)
#     [,1] [,2] [,3]
# [1,] "a"  NA   "1" 
# [2,] "b"  NA   "2" 
# [3,] NA   NA   "3" 

您也可以考虑从"stringi"包中stri_list2matrix。根据所需的方向:

library(stringi)
stri_list2matrix(mylist)
#      [,1] [,2] [,3]
# [1,] "a"  NA   "1" 
# [2,] "b"  NA   "2" 
# [3,] NA   NA   "3" 
stri_list2matrix(mylist, byrow = TRUE)
#      [,1] [,2] [,3]
# [1,] "a"  "b"  NA  
# [2,] NA   NA   NA  
# [3,] "1"  "2"  "3" 

最新更新