R和rbind制作没有相同长度的条目为零

Cod*_*lus 4 r vector matrix rbind

说我有两个向量v1v2和,我想打电话rbind(v1, v2).但是,假设length(v1)> length(v2).从文档中我已经读过,较短的向量将被回收.以下是此"回收"的示例:

> v1 <- c(1, 2, 3, 4, 8, 5, 3, 11)
> v2 <- c(9, 5, 2)
> rbind(v1, v2)
   [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
v1    1    2    3    4    8    5    3   11
v2    9    5    2    9    5    2    9    5
Run Code Online (Sandbox Code Playgroud)
  1. 是否有任何简单的方法可以阻止v2被回收,而是将其余的条目设为0?
  2. 有没有更好的方法来构建向量和矩阵?

非常感谢所有帮助!

Ric*_*rta 16

使用以下内容:

rbind(v1, v2=v2[seq(v1)])

   [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
v1    1    2    3    4    8    5    3   11
v2    9    5    2   NA   NA   NA   NA   NA
Run Code Online (Sandbox Code Playgroud)

工作原理:将矢量索引大于其长度的值会在该索引点返回NA值.

 #eg: 
{1:3}[c(3,5,1)]
#[1]  3 NA  1
Run Code Online (Sandbox Code Playgroud)

因此,如果您通过较长的一个的凹陷来索引较短的一个,您将获得较短的一个加上一系列的所有值NA.


概括:

v <- list(v1, v2)
n <- max(sapply(v, length))
do.call(rbind, lapply(v, `[`, seq_len(n)))
Run Code Online (Sandbox Code Playgroud)

  • @CodeKingPlusPlus,只有一种方法可以找出...;) (2认同)