如何用r交替地以降序和递增顺序重复一个序列向量?



我是r的新手,我需要创建一个长度为37的向量,其元素重复以下模式:0.0, 0.0, 0.5, 0.5, 1.0, 1.0, 1.5, 1.5,……, 2.5, 2.5, 3.0, 3.0, 2.5, 2.5, 2.0, 2.0,……, 0.5, 0.5, 0.0, 0.0, 0.5, 0.5,…问题是,在创建序列后,我不知道如何以降序和递增顺序交替重复它。下面是我的代码:

rep(seq(0.0,3.0,by = 0.5), each = 2, length = 37)

只按一般顺序重复序列。我应该在我的代码中补充什么来创建所需的矢量?希望有人能帮我解决这个问题。非常感谢!

你可以这样做:

f <- function(length.out) {
b = c(0, rep(seq(0.5, 2.5, 0.5), each=2), 3.0)
n=ceiling(length.out-2)/10
c(0, rep(c(b, rev(b)),n), 0)[1:length.out]
}

现在,只需调用函数,传递您想要的长度:

f(37)
[1] 0.0 0.0 0.5 0.5 1.0 1.0 1.5 1.5 2.0 2.0 2.5 2.5 3.0 3.0 2.5 2.5 2.0 2.0 1.5 1.5 1.0 1.0 0.5 0.5 0.0 0.0 0.5 0.5 1.0
[30] 1.0 1.5 1.5 2.0 2.0 2.5 2.5 3.0

f(246)

[1] 0.0 0.0 0.5 0.5 1.0 1.0 1.5 1.5 2.0 2.0 2.5 2.5 3.0 3.0 2.5 2.5 2.0 2.0 1.5 1.5 1.0 1.0 0.5 0.5 0.0 0.0 0.5 0.5
[29] 1.0 1.0 1.5 1.5 2.0 2.0 2.5 2.5 3.0 3.0 2.5 2.5 2.0 2.0 1.5 1.5 1.0 1.0 0.5 0.5 0.0 0.0 0.5 0.5 1.0 1.0 1.5 1.5
[57] 2.0 2.0 2.5 2.5 3.0 3.0 2.5 2.5 2.0 2.0 1.5 1.5 1.0 1.0 0.5 0.5 0.0 0.0 0.5 0.5 1.0 1.0 1.5 1.5 2.0 2.0 2.5 2.5
[85] 3.0 3.0 2.5 2.5 2.0 2.0 1.5 1.5 1.0 1.0 0.5 0.5 0.0 0.0 0.5 0.5 1.0 1.0 1.5 1.5 2.0 2.0 2.5 2.5 3.0 3.0 2.5 2.5
[113] 2.0 2.0 1.5 1.5 1.0 1.0 0.5 0.5 0.0 0.0 0.5 0.5 1.0 1.0 1.5 1.5 2.0 2.0 2.5 2.5 3.0 3.0 2.5 2.5 2.0 2.0 1.5 1.5
[141] 1.0 1.0 0.5 0.5 0.0 0.0 0.5 0.5 1.0 1.0 1.5 1.5 2.0 2.0 2.5 2.5 3.0 3.0 2.5 2.5 2.0 2.0 1.5 1.5 1.0 1.0 0.5 0.5
[169] 0.0 0.0 0.5 0.5 1.0 1.0 1.5 1.5 2.0 2.0 2.5 2.5 3.0 3.0 2.5 2.5 2.0 2.0 1.5 1.5 1.0 1.0 0.5 0.5 0.0 0.0 0.5 0.5
[197] 1.0 1.0 1.5 1.5 2.0 2.0 2.5 2.5 3.0 3.0 2.5 2.5 2.0 2.0 1.5 1.5 1.0 1.0 0.5 0.5 0.0 0.0 0.5 0.5 1.0 1.0 1.5 1.5
[225] 2.0 2.0 2.5 2.5 3.0 3.0 2.5 2.5 2.0 2.0 1.5 1.5 1.0 1.0 0.5 0.5 0.0 0.0 0.5 0.5 1.0 1.0
现在,调用函数

EDIT:

这是我能做的最短的:

rep(rep(c(0:6,5:1)/2,e=2),l=37)

[1] 0.0 0.0 0.5 0.5 1.0 1.0 1.5 1.5 2.0 2.0 2.5 2.5 3.0 3.0 2.5 2.5 2.0 2.0
[19] 1.5 1.5 1.0 1.0 0.5 0.5 0.0 0.0 0.5 0.5 1.0 1.0 1.5 1.5 2.0 2.0 2.5 2.5
[37] 3.0

我很想看到比这更好的方法:

a <- rep(seq(0.0,3.0,by = 0.5), each = 2)    # go up
b <- rev(a[3:12])                            # go down, w/o ends
c <- c(a,b)                                  # combine
rep(c, length.out = 37)                      # repeat for 37 elements
[1] 0.0 0.0 0.5 0.5 1.0 1.0 1.5 1.5 2.0
[10] 2.0 2.5 2.5 3.0 3.0 2.5 2.5 2.0 2.0
[19] 1.5 1.5 1.0 1.0 0.5 0.5 0.0 0.0 0.5
[28] 0.5 1.0 1.0 1.5 1.5 2.0 2.0 2.5 2.5
[37] 3.0

你可以这样做:

mySeq <- seq(0.5,3.0,by = 0.5)
rep(c(0, mySeq, sort(mySeq[-6], decreasing = TRUE)), each = 2, length = 37)

试试这个

rep(c(seq(0.0,3.0,by = 0.5),rep(seq(2.5,0.5,by = -0.5))), each = 2, length = 37)

最新更新