将列表转换为 R 中的向量(第一个向量由列表中每个元素的第一个元素等组成)在 R 中
Convert List to Vectors in R (1st vector comprises of 1st element of each element of list, etc.) in R
我想知道如何将列表转换为 R 中的向量,其中每个向量由列表元素的一个元素组成。特别是,我希望第一个向量包含列表中每个元素的第一个元素。我希望第二个向量包含列表中每个元素的第二个元素。更一般地说,我希望第 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"
我想知道如何将列表转换为 R 中的向量,其中每个向量由列表元素的一个元素组成。特别是,我希望第一个向量包含列表中每个元素的第一个元素。我希望第二个向量包含列表中每个元素的第二个元素。更一般地说,我希望第 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"