R语言如何去除向量连续重复值,仅保留各游程对应的唯一取值
R语言去除向量连续重复值的实现方法
最优方案:使用基础库自带rle()函数
这是最便捷也最易读的实现方式,无需安装任何第三方包,一行代码即可得到目标结果。
你的示例向量如下:
v <- c(3,3,3,3,3,1,1,1,1,1,1, 3,3,3,3,3,3,3,3,3,3,3,3, 3,3,3,2,2,2,2,2,2,2,3,3, 3,3,3,3,3,3,3,3,3,3,3)
直接调用rle()提取返回结果中的values字段即可:
exp_output <- rle(v)$values
输出验证:
print(exp_output) # [1] 3 1 3 2 3
原理说明
rle()是R内置的游程编码函数,专门用于统计向量中连续相同值的分布,返回结果包含两个字段:
lengths:每组连续相同值的元素个数values:每组连续相同值的取值
直接提取values就刚好满足去连续重复、仅保留每组唯一值的需求。
替代实现方案
如果你更习惯用逻辑判断的写法,也可以用diff()函数实现,逻辑等价但可读性稍弱:
exp_output <- v[c(TRUE, diff(v) != 0)]
逻辑为:保留第一个元素,以及所有和前一个元素取值不同的元素。
内容的提问来源于stack exchange,提问作者Jovan
相关产品推荐
相关产品推荐

