2010-06-23 83 views
4

我需要,使用R,生成以下格式的向量:生成的重复序列

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

是否有比创建12个载体和重复然后每一个的两倍更简单的方法?

回答

2

这是你想要的吗?

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

我认为这会对你有用。

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

你也可以这样做:

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

优雅!考虑到获得结果的方法数量多,我对于被淘汰的感觉好一些。 – dnagirl 2010-06-23 16:37:33

+0

甚至rep(1:10,2)+ rep(seq(0,120,10),每个= 20)将会起作用 – 2010-06-24 12:36:41

+0

大鼠,来到这么晚,并且认为我有最快的速度,但是这非常接近最佳解决方案。我只是投票。为了让它更快使用+号后面的“rep(0:12,each = 20)* 10”。 (总体上6倍加速) – John 2010-06-24 19:41:20

2

或者,你可以使用的repouter,如组合:

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

另一种方式:

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

可能更有效的版本:

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

使用split的方法是

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