在 R 中重复特定行给定次数

Repeat specific rows a given number of times in R

我有矩阵

x=matrix(c(1,1,2,2,10,10,20,20,21,21,30,30,31,31,40,40,
           101,103,102,103,111,112,120,121,120,121,130,131,130,131,140,141),16,2)

我想将 x 的每两行重复给定的次数,即基于 y=c(2,2,2,1,1,1,1,1).

我的意思是前两行x重复两次(y[1]等于2),后面两行x重复两次(y[2]等于2),依此类推。 x 的最后两行重复一次,因为 (y[8] 等于 1) 等于 1。

我试过 rep 但它重复每一行,但不是每两行。

我不想使用任何包,只是基础。另外,我想避免任何 for 循环。

使用sequence:

s <- rep(seq(nrow(x) / 2), y)
x[sequence(rep(2, length(s)), s*2-1), ]

#       [,1] [,2]
#  [1,]    1  101
#  [2,]    1  103
#  [3,]    1  101
#  [4,]    1  103
#  [5,]    2  102
#  [6,]    2  103
#  [7,]    2  102
#  [8,]    2  103
#  [9,]   10  111
# [10,]   10  112
# [11,]   10  111
# [12,]   10  112
# [13,]   20  120
# [14,]   20  121
# [15,]   21  120
# [16,]   21  121
# [17,]   30  130
# [18,]   30  131
# [19,]   31  130
# [20,]   31  131
# [21,]   40  140
# [22,]   40  141
x=matrix(c(1,1,2,2,10,10,20,20,21,21,30,30,31,31,40,40,
           101,103,102,103,111,112,120,121,120,121,130,131,130,131,140,141),16,2)


s <- rep(seq_len(8),  c(2,2,2,1,1,1,1,1))

x[as.vector(rbind(s*2 -1, s*2)),]

##>
##>      [,1] [,2]
##> [1,]    1  101
##> [2,]    1  103
##> [3,]    1  101
##> [4,]    1  103
##> [5,]    2  102
##> [6,]    2  103
##> [7,]    2  102
##> [8,]    2  103
##> [9,]   10  111
##>[10,]   10  112
##>[11,]   10  111
##>[12,]   10  112
##>[13,]   20  120
##>[14,]   20  121
##>[15,]   21  120
##>[16,]   21  121
##>[17,]   30  130
##>[18,]   30  131
##>[19,]   31  130
##>[20,]   31  131
##>[21,]   40  140
##>[22,]   40  141