У меня есть такой пример:
dat=c(2,1,1,2,3,4,2,5,6,7,8,1,2,4,5,6,7,3,4,5,2,3,1,2,1)
Я хочу присвоить значения перед началом [после появления 3 последовательных значений со средним значением> 3] и после конца [определяется как появление 3 последовательных значений <3] em> в NA.
Ожидаемые результаты
dat=c(NA,NA,NA,NA,NA,4,2,5,6,7,8,1,2,4,5,6,7,3,4,5,2,3,NA,NA,NA)
1 ответ
Используйте rollmean
, чтобы найти средние значения трех периодов, и rollapply
с all
, чтобы найти последовательные значения, которые все <= 3.
library(zoo)
r1 <- rollmean(dat, 3, fill = NA, align = "left")
i1 <- which(r1 > 3)[1]
r2 <- rollapply(dat <= 3, 3, all, fill = NA, align = "left")
i2 <- tail(which(r2), 1)-1
replace(NA*dat, i1:i2, dat[i1:i2])
## [1] NA NA NA NA NA 4 2 5 6 7 8 1 2 4 5 6 7 3 4 5 2 3 NA NA NA
Похожие вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат полностью. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.