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

标签 list r merge matrix

我有几个长度不等的 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/

相关文章:

r - 使用类函数更改 S4 对象的 "class"时发生了什么?

r - R 中的时间序列预测,单变量时间序列

python - 在 Python 3.x 中使用 Pandas 合并基于列和特定列的值的两个 DataFrame

c# - 在 C# 中计算(复杂的)十进制数数组

list - 在 Racket 中创建一个空列表

r - R 中用于计算过程表单数据的分层对数秩检验?

python - 将数据帧与时间戳和间隔合并

merge - sed:多行的条件合并

python - 在Python中,如何计算电子邮件地址列表中 '1'的数量?

r - 将元素添加到 R 中的 data.frames 命名列表