【问题标题】:Generate a repeating sequence生成重复序列
【发布时间】:2010-06-23 14:57:55
【问题描述】:

我需要使用 R 生成如下格式的向量:

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

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

【问题讨论】:

    标签: r sequence repeat


    【解决方案1】:

    你也可以这样做:

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

    【讨论】:

    • 优雅!考虑到获得结果的方法有很多,我对自己的困惑感觉好多了。
    • 老鼠,来得这么晚,以为我是最快的,但这太接近最佳解决方案了,我只是投票赞成。为了让它更快,在 + 号后使用 "rep(0:12, each = 20)*10"。 (整体加速 6 倍)
    • 关于速度问题 - 这个答案比 lapply() 快 5 倍。下面的 outer() 答案介于这个答案和我对性能的修改之间。较新的矩阵答案在速度上与我在这里的修改大致相同,并且可能是整体上最快的。
    • 还有一项修改:1:10 + rep(10*(0:12), each=20).
    【解决方案2】:

    这是你想要的吗?

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          我想这对你有用。

          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)
          

          【讨论】:

            【解决方案6】:

            使用split的方法是

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

            【讨论】:

              猜你喜欢
              • 2018-12-01
              • 2011-04-10
              • 1970-01-01
              • 2019-09-20
              • 2014-03-15
              • 1970-01-01
              • 2021-04-17
              • 1970-01-01
              相关资源
              最近更新 更多