我想这样合并两个向量:
a = c(1,2,3)
b = c(11,12,13)
merged vector : c(1,11,2,12,3,13)
我该怎么办?
rbind()@jalapic 的答案非常好。这是一个替代方案,它创建一个新向量,然后为其分配交替值。
a <- c(1,2,3)
b <- c(11,12,13)
x <- vector(class(a), length(c(a, b)))
x[c(TRUE, FALSE)] <- a
x[c(FALSE, TRUE)] <- b
x
# [1] 1 11 2 12 3 13
还有一个显示 append
c(sapply(seq_along(a), function(i) append(a[i], b[i], i)))
# [1] 1 11 2 12 3 13
只是想添加一个更简单的解决方案,该解决方案适用于向量长度不相等且您想要将额外数据附加到末尾的情况。
> a <- 1:3
> b <- 11:17
> c(a, b)[order(c(seq_along(a)*2 - 1, seq_along(b)*2))]
[1] 1 11 2 12 3 13 14 15 16 17
说明:
c(a, b)在a和中创建值的向量b。
seq_along(a)*2 - 1创建第一个length(a)奇数的向量。
seq_along(b)*2创建一个第一个length(b)偶数的向量。
order(...)将返回两个seq_along向量中数字的索引,即x[order(x)]一个有序列表。由于第一个seq_along包含偶数,第二个seq_along包含奇数,因此顺序将从第一个元素中取出第seq_along一个元素seq_along,然后从第二个元素中取出第一个元素,然后从第一个元素中取出第二个元素seq_along,依此类推。尾部有多余的数据。
通过c(a, b)使用order向量建立索引,我们将穿插a和b。
请注意,因为当输入为输入时seq_along返回,所以即使向量之一是length,此解决方案也可以工作。numeric(0)NULL0
这可以使用rbind:
c(rbind(a, b))
例如:
a = c(1,2,3)
b = c(11,12,13)
c(rbind(a,b))
#[1] 1 11 2 12 3 13
举报