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

Get subsets between one element and the previous same element

考虑一个向量:

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

我们可以遍历向量的序列,从向量的前面的元素中获取相同元素('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