首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将列表转换为R中的向量(第一向量包含列表中每个元素的第一个元素,等等)在R中

将列表转换为R中的向量(第一向量包含列表中每个元素的第一个元素,等等)在R中
EN

Stack Overflow用户
提问于 2015-01-06 19:38:36
回答 2查看 335关注 0票数 0

我想知道如何将列表转换为R中的向量,其中每个向量包含列表元素的一个元素。特别是,我希望第一个向量包含列表中每个元素的第一个元素。我希望第二个向量包含列表中每个元素的第二个元素。更广泛地说,我希望第n向量包含列表中每个元素的第n个元素。因此,n将等于列表中最长元素的长度。

例如,假设我们有:

代码语言:javascript
运行
复制
mylist = list(c("a", "b"), c(character(0)), c(1, 2, 3))

我想创建三个向量

代码语言:javascript
运行
复制
first_vector = c("a", NA, 1)
second_vector = c("b", NA, 2)
third_vector = c(NA, NA, 3)

正如您在上面的示例中所看到的,由于缺少值,我可能会有额外的复杂情况。

提前感谢您的帮助!

-Vincent

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-06 19:58:49

您还可以考虑来自"stringi“包的stri_list2matrix。视所需的方向而定:

代码语言:javascript
运行
复制
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" 
票数 3
EN

Stack Overflow用户

发布于 2015-01-06 19:46:22

通常在您的全局环境中创建无穷无尽的对象是错误的做法,而且由于您的所有向量都是相同的长度,您可以创建一个矩阵代替。

代码语言:javascript
运行
复制
indx <- max(lengths(mylist))
sapply(mylist, `length<-`, indx)
#     [,1] [,2] [,3]
# [1,] "a"  NA   "1" 
# [2,] "b"  NA   "2" 
# [3,] NA   NA   "3" 
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27805929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档