You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何提取向量中连续重复观测的单值序列

R语言提取向量连续重复块的唯一序列

需求为:对存在连续重复值的向量,保留每段连续重复值的第一个元素,按顺序输出非连续重复的单值序列,跳过中间连续重复项。

示例

  • 输入测试向量:
    v <- c(1,1,1,2,2,2,1,1,1,2,1,1,2,2,2,2,2,1,1,1)
  • 期望输出结果:
    c(1,2,1,2,1,2,1)

简洁实现方案

你写的for循环逻辑正确,但R有更高效、代码更短的原生实现,不需要加载第三方包:

通用版本(支持所有向量类型:数值、字符、逻辑等)

uniq_v <- v[c(TRUE, v[-1]!= v[-length(v)])]

逻辑说明:

  • v[-1]是移除第一个元素的向量,v[-length(v)]是移除最后一个元素的向量,二者逐位比较,得到从第二个元素开始,每个元素与前一个元素是否不相等的布尔向量
  • 向量首位拼接TRUE,因为第一个元素必然需要保留
  • 用最终得到的布尔向量直接取原向量子集,一步得到结果,运行效率远高于手动写for循环,尤其适配长向量场景。

数值向量专属简化写法

如果处理的是数值型向量,可以用diff函数简化代码:

uniq_v <- v[c(1, which(diff(v)!= 0) + 1)]

逻辑说明:diff(v)会逐位计算相邻元素的差值,连续重复值的差值为0,找到差值不为0的位置加1就是值发生跳变的索引,再加上第一个元素的索引1,取对应子集即可。

内容的提问来源于stack exchange,提问作者Giuseppe D'alterio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 03:12:33