如何将向量中的值与r之前和之后的值进行匹配?

Ala*_*laa 6 r

我试图根据矢量中焦点值之前或之后的一个元素值来识别不匹配的值.有什么想过怎么办?

让我们说,我有一个向量:x<-c(1,1,2,1,3,3).如果element[i]与item i(element[i-1]element[i+1])之前或之后的元素匹配.如果匹配element[i]应该等于"是",否则它应该等于"否".

预期的输出x<-c(1,1,2,1,3,3)应该是c("yes","yes","no","no","yes","yes").

Dar*_*sai 7

使用rle()来识别相等值的运行.rle(x)$length == 1表示当前值之前或之后没有相等的值.

rep(ifelse((len <- rle(x)$lengths) == 1, "no", "yes"), len)
# [1] "yes" "yes" "no"  "no"  "yes" "yes"
Run Code Online (Sandbox Code Playgroud)

编辑:更简洁的版本(感谢@ dww的评论)

rep((len <- rle(x)$lengths) == 1, len)
# [1] FALSE FALSE  TRUE  TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

  • 或者更简洁`rep((l < - rle(x)$ l)== 1,l)` (3认同)

G5W*_*G5W 5

这是一个用于此的衬垫 diff

c(diff(x) == 0, F) | c(F, diff(x) == 0)
[1]  TRUE  TRUE FALSE FALSE  TRUE  TRUE
Run Code Online (Sandbox Code Playgroud)

c(diff(x) == 0, F)对于每个索引,元素[i] ==元素[i + 1](不适用于最后一个元素)c(F, diff(x) == 0)将为true,对于每个具有元素[i] ==元素[i-1]的索引都为true(不适用于第一个元素)