通过R中的4步交替组合2个向量

通过R中的4步交替组合2个向量,r,vector,merge,rbind,cbind,R,Vector,Merge,Rbind,Cbind,我有两个长度相同的向量: a = c(723, 680, 2392, 2063, 721, 746, 2053, 2129) b = c(1, 2, 3, 4, 5, 6, 7, 8) 现在我想合并它们,但步骤为4个元素,更准确地说,我想作为输出: 723 680 2392 2063 1 2 3 4 721 746 2053 2129 5 6 7 8 我们可以通过拆分来实现这一点。创建一个函数,用gl创建一个分组变量,该变量在'n'块处递增(此处n为4),然后将两个向量拆分为列表,使用映射连

我有两个长度相同的向量:

a = c(723, 680, 2392, 2063, 721, 746, 2053, 2129)
b = c(1, 2, 3, 4, 5, 6, 7, 8)
现在我想合并它们,但步骤为4个元素,更准确地说,我想作为输出:

723 680 2392 2063 1 2 3 4 721 746 2053 2129 5 6 7 8

我们可以通过拆分来实现这一点。创建一个函数,用
gl
创建一个分组变量,该变量在'n'块处递增(此处n为4),然后将两个向量拆分为
列表
,使用
映射
连接相应的
列表
元素和
取消列表
以创建
向量

f1 <- function(x, n) split(x, as.integer(gl(length(x), n, length(x))))
unlist( Map(c, f1(a, 4), f1(b, 4)), use.names = FALSE)
#[1]  723  680 2392 2063    1    2    3    4
#[9]  721  746 2053 2129    5    6    7    8

下面是一些其他基本的R选项

  • 使用
    订单
  • 使用
    split
    +
    unlist

谢谢,这很有效。我使用了第二个,因为我有两个相同长度的向量。我认为我们应该使用rbind和c;n=4有点棘手。@如果我们不必在每个“n”处拆分,那么
matrix
调用dim属性时,
rbind
c
会起作用吗
c(rbind(matrix(a, nrow =4), matrix(b, nrow = 4)))
#[1]  723  680 2392 2063    1    2    3    4  721  746 2053 2129    5    6    7    8
c(a,b)[order(c(2 * ceiling(seq_along(a) / 4) - 1, 2 * ceiling(seq_along(b) / 4)))]
unlist(
  split(
    c(a, b),
    c(2 * ceiling(seq_along(a) / 4) - 1, 2 * ceiling(seq_along(b) / 4))
  ),
  use.names = FALSE
)