2010-06-23 9 views
4

je besoin de générer un vecteur au format suivant en utilisant R:générer une séquence répétitive

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

Y at-il un moyen plus facile que de créer 12 des vecteurs, puis en répétant chacun deux fois?

Répondre

2

Est-ce ce que vous voulez?

unlist(lapply(rep(seq(1, 121, by=10), each=2), function(x) seq(x, x+9))) 
1

Je pense que cela vous plaira.

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) 
18

vous pouvez également faire:

rep(1:10, 26) + rep(seq(0,120,10), each=20) 
+0

élégant! Et étant donné le nombre de façons d'arriver au résultat, je me sens un peu mieux d'être déconcerté. – dnagirl

+0

Même rep (1:10, 2) + rep (seq (0,120,10), chacun = 20) fonctionnera –

+0

rats, est venu à ce retard et pensé que j'avais le plus rapide, mais c'est si proche de la solution optimale I ' Je ne fais que voter. Pour le rendre encore plus rapide, utilisez "rep (0:12, each = 20) * 10" après le signe +. (6x accélération globale) – John

2

Sinon, vous pouvez utiliser une combinaison de rep et outer, tels que:

c(outer(1:10,rep(0:12,each=2),function(x,y)10*y+x)) 
3

Une autre façon:

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

possible version plus efficace:

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

Une méthode utilisant split est

unlist(rep(split(seq_len(130), rep(1:13, each=10)), each=2), use.names=FALSE) 
Questions connexes