我想以这种方式合并2个向量:
a = c(1,2,3)
b = c(11,12,13)
merged vector : c(1,11,2,12,3,13)
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
jal*_*pic 59
这将使用rbind
:
c(rbind(a, b))
Run Code Online (Sandbox Code Playgroud)
例如:
a = c(1,2,3)
b = c(11,12,13)
c(rbind(a,b))
#[1] 1 11 2 12 3 13
Run Code Online (Sandbox Code Playgroud)
Ric*_*ven 14
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
Run Code Online (Sandbox Code Playgroud)
还有一个显示 append
c(sapply(seq_along(a), function(i) append(a[i], b[i], i)))
# [1] 1 11 2 12 3 13
Run Code Online (Sandbox Code Playgroud)
只是想添加一个更简单的解决方案,该解决方案适用于向量长度不相等且您想要将额外数据附加到末尾的情况。
> 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
Run Code Online (Sandbox Code Playgroud)
说明:
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)
NULL
0