Генерация повторяющейся последовательности - PullRequest
4 голосов
/ 23 июня 2010

Мне нужно сгенерировать вектор следующего формата, используя R:

1:10, 1:10, 11:20, 11:20, ... 121:130, 121:130

Есть ли более простой способ, чем создание 12 векторов и повторение каждого из них дважды?

Ответы [ 6 ]

18 голосов
/ 23 июня 2010

Также вы можете сделать:

rep(1:10, 26) + rep(seq(0,120,10), each=20)
3 голосов
/ 24 июня 2010

Другой способ:

x <- matrix(1:130, 10, 13)
c(rbind(x, x))

Возможна более эффективная версия:

x <- 1:130
dim(x) <- c(10,13)
c(rbind(x, x))
3 голосов
/ 23 июня 2010

Это то, что вы хотите?

unlist(lapply(rep(seq(1, 121, by=10), each=2), function(x) seq(x, x+9)))
2 голосов
/ 23 июня 2010

В качестве альтернативы вы можете использовать комбинацию rep и outer, например:

c(outer(1:10,rep(0:12,each=2),function(x,y)10*y+x))
1 голос
/ 05 июля 2017

Метод с использованием split равен

unlist(rep(split(seq_len(130), rep(1:13, each=10)), each=2), use.names=FALSE)
1 голос
/ 23 июня 2010

Я думаю, что это сделает вас.

x <- ((0:12)*10)+1
y <- x + 9

repeatVectors <- function(x,y){
    rep(seq(x,y),2)
}

z <- mapply(repeatVectors, x,y)
z <- as.vector(z)
...