我试图根据矢量中焦点值之前或之后的一个元素值来识别不匹配的值.有什么想过怎么办?
让我们说,我有一个向量: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")
.
使用rle()
来识别相等值的运行.rle(x)$length == 1
表示当前值之前或之后没有相等的值.
rep(ifelse((len <- rle(x)$lengths) == 1, "no", "yes"), len) # [1] "yes" "yes" "no" "no" "yes" "yes"
编辑:更简洁的版本(感谢@ dww的评论)
rep((len <- rle(x)$lengths) == 1, len) # [1] FALSE FALSE TRUE TRUE FALSE FALSE
这是一个用于此的衬垫 diff
c(diff(x) == 0, F) | c(F, diff(x) == 0) [1] TRUE TRUE FALSE FALSE TRUE TRUE
c(diff(x) == 0, F)
对于每个索引,元素[i] ==元素[i + 1](不适用于最后一个元素)c(F, diff(x) == 0)
将为true,对于每个具有元素[i] ==元素[i-1]的索引都为true(不适用于第一个元素)