gpt4 book ai didi

list - 合并(合并)不同长度的向量

转载 作者:行者123 更新时间:2023-12-03 09:08:38 30 4
gpt4 key购买 nike

我有几个长度不等的 vector ,我想对其进行cbind。我将 vector 放入列表中,并尝试结合使用do.call(cbind, ...):

nm <- list(1:8, 3:8, 1:5)
do.call(cbind, nm)

# [,1] [,2] [,3]
# [1,] 1 3 1
# [2,] 2 4 2
# [3,] 3 5 3
# [4,] 4 6 4
# [5,] 5 7 5
# [6,] 6 8 1
# [7,] 7 3 2
# [8,] 8 4 3
# Warning message:
# In (function (..., deparse.level = 1) :
# number of rows of result is not a multiple of vector length (arg 2)

不出所料,结果矩阵中的行数是最长 vector 的长度,较短 vector 的值将被回收以弥补该长度。

相反,我想用 NA值填充较短的 vector ,以获得与最长的 vector 相同的长度。我希望矩阵看起来像这样:
#      [,1] [,2] [,3]
# [1,] 1 3 1
# [2,] 2 4 2
# [3,] 3 5 3
# [4,] 4 6 4
# [5,] 5 7 5
# [6,] 6 8 NA
# [7,] 7 NA NA
# [8,] 8 NA NA

我该怎么做呢?

最佳答案

您可以使用索引,如果索引的数字超出对象的大小,它将返回NA。这适用于用foo定义的任意数量的行:

nm <- list(1:8,3:8,1:5)

foo <- 8

sapply(nm, '[', 1:foo)

编辑:

或者在一行中使用最大的 vector 作为行数:
sapply(nm, '[', seq(max(sapply(nm,length))))

R 3.2.0中,您可以使用 lengths(“获取列表中每个元素的长度”)代替 sapply(nm, length):
sapply(nm, '[', seq(max(lengths(nm))))

关于list - 合并(合并)不同长度的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5531471/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com