从载体重复序列

时间:2015-11-24 09:01:40

标签: r indexing

说我有这样的矢量:

vector <- 1:9
#$ [1]  1  2  3  4  5  6  7  8  9

我现在想要重复每ii+x个序列n次,就像x=3n=2一样:

#$ [1] 1 2 3 1 2 3 4 5 6 4 5 6 7 8 9 7 8 9

我正在这样做:

index <- NULL
x <- 3
n <- 2
for (i in 1:(length(vector)/3)) {
  index <- c(index, rep(c(1:x + (i-1)*x), n))
}
#$ [1] 1 2 3 1 2 3 4 5 6 4 5 6 7 8 9 7 8 9

这很好用,但我有预感必须是一个更好的方法(特别是因为通常,for循环答案)。

Ps。:用例实际上是在数据框中重复行,但只是获取索引向量就可以了。

1 个答案:

答案 0 :(得分:2)

您可以尝试先使用split向量,然后使用repunlist

x <- 3  # this is the length of each subset sequence from i to i+x (see above)
n <- 2  # this is how many times you want to repeat each subset sequence
unlist(lapply(split(vector, rep(1:(length(vector)/x), each = x)), rep, n), use.names = FALSE)
#  [1] 1 2 3 1 2 3 4 5 6 4 5 6 7 8 9 7 8 9

或者,您可以尝试创建matrix并将其转换为矢量:

c(do.call(rbind, replicate(n, matrix(vector, ncol = x), FALSE)))
#  [1] 1 2 3 1 2 3 4 5 6 4 5 6 7 8 9 7 8 9