在 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
我有矩阵
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