如何自动获取R向量中首次连续重复值的起始索引?
解决向量末尾重复值首次出现索引的问题
针对你提到的递增向量(一旦开始重复就持续到末尾,且至少最后两个值重复),可以用以下几种简单的R语言方法自动获取重复值首次出现的索引:
首先定义示例向量:
a <- c(14,26,38,64,96,127,152,152,152,152,152,152) b <- c(4,7,9,13,13,13,13,13,13,13,13,13,13,13) c <- c(62,297,297,297,297,297,297,297,297,297,297,297)
方法一:直接定位末尾重复值的首次出现
因为向量最后会持续重复,所以重复值就是向量的最后一个元素,直接找到该元素第一次出现的索引即可:
find_first_repeat <- function(vec) { repeat_val <- tail(vec, 1) which(vec == repeat_val)[1] } # 批量处理多个向量 sapply(list(a, b, c), find_first_repeat) # 输出结果:7 4 2
方法二:利用差值判断重复起始点
通过计算相邻元素的差值,找到第一个差值为0的位置,加1就是重复值首次出现的索引(差值为0意味着当前元素和前一个相等):
find_first_repeat_v2 <- function(vec) { diffs <- diff(vec) which(diffs == 0)[1] + 1 } sapply(list(a, b, c), find_first_repeat_v2) # 输出结果:7 4 2
两种方法都能满足需求,第一种逻辑更直观,第二种则从向量递增的特性出发推导,根据个人习惯选择即可。
内容的提问来源于stack exchange,提问作者climsaver
相关产品推荐
相关产品推荐

