获取一个元素和前一个相同元素之间的子集
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
考虑一个向量:
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