代码之家  ›  专栏  ›  技术社区  ›  Maël

获取一个元素和上一个相同元素之间的元素子集

  •  0
  • Maël  · 技术社区  · 4 年前

    考虑一个矢量:

    vec <- c(1, 3, 4, 3, 3, 1, 1)
    

    对于向量的每个元素,我想得到第n个元素与其前一次出现之间的值的子集。

    预期输出为:

    f(vec)
    
    # [[1]]
    # [1] 1
    # 
    # [[2]]
    # [1] 3
    # 
    # [[3]]
    # [1] 4
    # 
    # [[4]]
    # [1] 3 4 3
    # 
    # [[5]]
    # [1] 3 3
    # 
    # [[6]]
    # [1] 1 3 4 3 3 1
    # 
    # [[7]]
    # [1] 1 1
    
    0 回复  |  直到 4 年前
        1
  •  1
  •   akrun    4 年前

    我们可以在向量的序列上循环,从向量的前几个元素中得到同一元素('i1')的最后一个匹配的索引,然后得到序列( : )对向量进行子集运算

    lapply(seq_along(vec), function(i)  {
      i1 <- tail(which(vec[1:(i-1)] == vec[i]), 1)[1]
      i1[is.na(i1)] <- i
      vec[i1:i]
     })
    

    -输出

    [[1]]
    [1] 1
    
    [[2]]
    [1] 3
    
    [[3]]
    [1] 4
    
    [[4]]
    [1] 3 4 3
    
    [[5]]
    [1] 3 3
    
    [[6]]
    [1] 1 3 4 3 3 1
    
    [[7]]
    [1] 1 1