R中是否有一种有效的方法来识别相邻的相同元素?
假设我有这个载体:
(Vx)
1 2 2 1 3 3 3 1 2 2 3 3 0
我想得到:
0 1 1 0 1 1 1 0 1 1 1 1 0
有没有干净的方法呢?我试图避免循环或繁琐的功能,但到目前为止我没有运气。
感谢。
答案 0 :(得分:2)
vec <- c(1, 2, 2, 1, 3, 3, 3, 1, 2, 2, 3, 3, 0)
l <- rle(vec)$lengths
rep(ifelse(l == 1, 0, 1), times = l)
# [1] 0 1 1 0 1 1 1 0 1 1 1 1 0
答案 1 :(得分:1)
尝试rle
和inverse.rle
,如下所示:
r <- rle(vx)
r$values <- (r$lengths > 1) + 0
inverse.rle(r)
,并提供:
[1] 0 1 1 0 1 1 1 0 1 1 1 1 0