为了账号安全,请及时绑定邮箱和手机立即绑定

如何合并两个向量的交替索引?

/ 猿问

如何合并两个向量的交替索引?

若吾皇 2019-10-31 12:53:23

我想这样合并两个向量:


a = c(1,2,3)

b = c(11,12,13)

merged vector : c(1,11,2,12,3,13)

我该怎么办?


查看完整描述

3 回答

?
慕莱坞5435954

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


查看完整回答
反对 回复 2019-10-31
?
白衣染霜花

只是想添加一个更简单的解决方案,该解决方案适用于向量长度不相等且您想要将额外数据附加到末尾的情况。


> 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


查看完整回答
反对 回复 2019-10-31
?
素胚勾勒不出你

这可以使用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 


查看完整回答
反对 回复 2019-10-31

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信