Вот один базовый подход R. Мы можем сгенерировать смещенные векторы, либо на одну позицию слева, либо на одну позицию справа от исходного входного вектора. Затем мы можем утверждать, совпадает ли каждая позиция в исходном векторе с одной и той же позицией в смещенных векторах. Для визуализации:
x: [ 1, 1, 2, 1, 3, 3]
------------------------
x1: [NA, 1, 1, 2, 1, 3]
x2: [ 1, 2, 1, 3, 3, NA]
Мы можем увидеть результат, который вы ожидаете, по результатам осмотра. Вот фрагмент кода, реализующий это:
x <- as.character(c(1,1,2,1,NA,NA))
x1 <- c('NA', x[1:length(x)-1])
x2 <- c(x[2:length(x)], 'NA')
result <- (x==x1 | is.na(x) & is.na(x1) | x==x2 | is.na(x) & is.na(x2))
output <- ifelse(is.na(result) | !result, "no", "yes")
output
[1] "yes" "yes" "no" "no" "yes" "yes"
Обратите внимание, что я намеренно преобразовал ваш числовой вектор в символьный вектор, чтобы я мог использовать 'NA'
, строковый литерал, в качестве заполнителя для пропущенного значения. Если бы мы использовали вышеупомянутую логику с числовым вектором, NA
может столкнуться с фактическими пропущенными значениями.