У меня очень длинное и уродливое решение, но оно работает: p Я надеюсь, что кто-то найдет более чистое решение :) Сначала я создаю матрицу, которая содержит 1 столбец, который представляет собой каждое число неповторяющимся образом (не уникальным,но без последовательных), а затем 1 столбец с количеством повторений этого числа.Затем я применяю логическую функцию, чтобы увидеть, окружена ли 3 цифрами 5, и на последнем шаге я распутываю вектор обратно к его исходной длине, используя функцию rep () ...
x <- c(5,3,3,5,5,4,3,3,5)
x_reduced <- x[x!=c(x[-1], FALSE)]
x_mat <- matrix(0, ncol = 3, nrow = length(x_reduced))
x_mat[ , 1] <- x_reduced
ctr = 1
x_ctr = 1
while (ctr < length(x)) {
x_mat[x_ctr ,1] = x[ctr]
x_mat[x_ctr, 2] = x_mat[x_ctr, 2] + 1
if(x[ctr+1] == x[ctr]){
ctr = ctr + 1
} else {
x_ctr = x_ctr + 1
ctr = ctr + 1
}
}
x_mat[nrow(x_mat), 1] <- x[length(x)]
x_mat[nrow(x_mat), 2] <- x_mat[nrow(x_mat), 2] + 1
check_element <- function(pos) {
if(pos == 1 | pos == nrow(x_mat)) return(FALSE)
if(x_mat[pos+1, 1] == 5 & x_mat[pos-1, 1] == 5){
return(TRUE)
} else {
return(FALSE)
}
}
x_mat[,3] <- sapply(1:nrow(x_mat), check_element)
rep(x_mat[,3], x_mat[,2])