【发布时间】:2018-03-09 16:46:28
【问题描述】:
我想创建一个从 5 到 0 的重复模式,然后再回到 5、3 次,所以我想要 5、4、3、2、1、0、1、2、3、4、5,...... .., 5 我怎么能这样做是R??
我知道rep
(seq(from=a, by=b, length=c),d)
函数,但不知道如何将它与此模式一起使用... 谁能帮忙,我,我想用
x <- 5
y <- 3
【问题讨论】:
我想创建一个从 5 到 0 的重复模式,然后再回到 5、3 次,所以我想要 5、4、3、2、1、0、1、2、3、4、5,...... .., 5 我怎么能这样做是R??
我知道rep
(seq(from=a, by=b, length=c),d)
函数,但不知道如何将它与此模式一起使用... 谁能帮忙,我,我想用
x <- 5
y <- 3
【问题讨论】:
我们可以使用seq 和rev。因为我们不想重复 5 和 0 两次,所以我没有将它们包含在 seq 命令中。我们重复 seq(4, 1) 及其反向 (rev) 三次。
a = seq(4, 1)
c(rep(c(5, a, 0, rev(a)), 3), 5)
#[1] 5 4 3 2 1 0 1 2 3 4 5 4 3 2 1 0 1 2 3 4 5 4 3 2 1 0 1 2 3 4 5
【讨论】:
loopnum <- function(n,times) { s <- seq(n,1,-1); c(rep(c(s,0, rev(s[-1])), times), n) } 作为函数然后loopnum(5, 3) 得到相同的结果。
c(rep(c(5:0,1:4),3),5)
这是另一个想法。我们可以使用5:0 和0:5 创建向量。然后我们可以重复向量三次。最后,我们可以使用rle创建run-length encoding,将大于1的长度修改为1,使用inverse.rle创建最终输出。
x <- rep(c(5:0, 0:5), 3)
y <- rle(x)
y$lengths[y$lengths > 1] <- 1
z <- inverse.rle(y)
z
[1] 5 4 3 2 1 0 1 2 3 4 5 4 3 2 1 0 1 2 3 4 5 4 3 2 1 0 1 2 3 4 5
【讨论】: