生成重复序列

4
我需要使用R生成以下格式的向量:
1:10, 1:10, 11:20, 11:20, ... 121:130, 121:130

有没有比创建12个向量,然后将每个向量重复两次更简单的方法?
6个回答

18

你也可以这样做:

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

优雅!有很多方法可以得到结果,这让我对自己的困惑感到稍微好一些了。 - dnagirl
迟来的参与者,我原以为自己有最快的解决方案,但这个解决方案如此接近最优解,所以我投票赞同。为了使其更快,请在加号后使用“rep(0:12, each = 20)*10”(总体加速6倍)。 - John
进一步谈到速度问题 - 这个答案比lapply()快5倍。下面的outer()答案介于这个答案和我的性能修改之间。新的矩阵答案在速度上与我这里的修改大致相等,可能是最快的。 - John
还有一个修改:1:10 + rep(10*(0:12), each=20) - Marek

3

这是您想要的吗?

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

3

另一种方法:

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

可能更高效的版本:

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

2

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

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

1
一种使用 split 的方法是:
unlist(rep(split(seq_len(130), rep(1:13, each=10)), each=2), use.names=FALSE)

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接