【问题标题】:R repeat a seqeunce reducing max value by 1R重复一个将最大值减少1的序列
【发布时间】:2017-01-12 06:25:13
【问题描述】:

我有一个从 0(开始)到 5(最后一天)编号的天序列我想创建一个重复 N 次的列表,其中 N 是总天数,在这种情况下是 6 天(0 ,1,2,3,4,5),每次连续重复应该将向量的长度减少 1。

所以输出应该是:

0 1 2 3 4 5 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0

我试过了

for(i in 5:0){
i<-seq(from=0,to=i,by=1)
print(i)
}

这会打印出正确的输出:

0 1 2 3 4 5
0 1 2 3 4
0 1 2 3 
0 1 2 
0 1
0

如何将每次迭代的输出写入向量?我尝试将 listItems 变量分配为 0 并使用 listItems[i]

我想我错过了一些非常简单的东西(像往常一样)

【问题讨论】:

    标签: r seq rep


    【解决方案1】:

    最抽象的方法如下:

    days <- 0:5
    days_decrement <- lapply(rev(seq_along(days)), head, x=days)
    days_decrement
    # [[1]]
    # [1] 0 1 2 3 4 5
    # 
    # [[2]]
    # [1] 0 1 2 3 4
    # 
    # [[3]]
    # [1] 0 1 2 3
    # 
    # [[4]]
    # [1] 0 1 2
    # 
    # [[5]]
    # [1] 0 1
    # 
    # [[6]]
    # [1] 0
    

    rev(seq_along(days) 创建每个迭代的最后一个索引的向量,然后 lapply 使用 head 对其进行迭代以提取所需数量的第一个元素。编号为i 的迭代可以通过days_decrement[[i]] 访问。

    这种方法是通用的,当数据按行存储时可以处理数据框和矩阵(尽管应该将rev(seq_along(days) 更改为rev(seq_len(nrow(days))))。

    【讨论】:

    • 所有答案都非常好,evgeniC 对答案的一些补充帮助我找到了另一个难题的答案。
    【解决方案2】:

    我们可以使用sequence

    sequence(6:1)-1
    #[1] 0 1 2 3 4 5 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0
    

    【讨论】:

      【解决方案3】:

      一个向量每个条目只能有一个元素,如果要将向量分配给一个条目,我建议使用列表。

      一种方法如下所示:

      retList <- list()
      for (i in 5:0) {
          res <- 0:i
          retList <- append(retList, list(res))
      }
      retList
      # [[1]]
      # [1] 0 1 2 3 4 5
      # 
      # [[2]]
      # [1] 0 1 2 3 4
      # 
      # [[3]]
      # [1] 0 1 2 3
      # 
      # [[4]]
      # [1] 0 1 2
      # 
      # [[5]]
      # [1] 0 1
      # 
      # [[6]]
      # [1] 0
      
      # or access a part 
      retList[[2]]
      # [1] 0 1 2 3 4
      

      这能满足你的需求吗?

      【讨论】:

        【解决方案4】:

        我认为这可以解决问题...

        unlist(lapply(5:0, seq, from = 0))
        

        本质上,这使用lapply()c(5,4,3,2,1,0) 的每个值传递给seq()to 参数,同时将from 参数保持为0。结果在一个列表中,因此@ 987654327@.

        【讨论】:

          猜你喜欢
          • 2020-09-04
          • 2016-12-14
          • 2019-02-08
          • 2014-11-28
          • 2016-06-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多