R 如何在 运行 长度中保存唯一值的同时删除重复值

R how to remove repeated value while save unique values in running length

所以示例我有这个向量:

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)

我喜欢将向量简化为预期输出:

exp_output <- c(3,1,3,2,3)

最好最方便的方法是什么?谢谢

尝试 rle(v)$values 结果是 [1] 3 1 3 2 3.

使用 diffwhich 的另一个选项。

v[c(1, which(diff(v) != 0) + 1)]
#[1] 3 1 3 2 3

另一个选项是 lag:

library(dplyr)
v[v!=lag(v, default=1)]
[1] 3 1 3 2 3

我们可以使用rleid

library(data.table)
tapply(v, rleid(v), FUN = first)
1 2 3 4 5 
3 1 3 2 3