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
.
使用 diff
和 which
的另一个选项。
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
所以示例我有这个向量:
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
.
使用 diff
和 which
的另一个选项。
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