Используя DF
, который воспроизводимо показан в примечании, в конце используйте rollapplyr, чтобы вернуть TRUE, если в последние n дней были какие-либо единицы, и FALSE в противном случае. Затем используйте ifelse
, чтобы преобразовать TRUE в 1 и FALSE в NA. В вопросе не указывалось, как обрабатывать первые n-1 элементов, но ниже мы заполняем их единицами. (Альтернативы будут fill=NA
или partial=TRUE
, где эта последняя альтернатива будет применяться к любому количеству элементов, если их меньше, чем n.
library(zoo)
# n <- 30
n <- 3
transform(DF, price = price * ifelse(rollapplyr(maj, n, any, fill = 1), 1, NA))
дает:
day maj price
1 2019-01-02 1 1435
2 2019-01-03 0 1435
3 2019-01-04 0 1435
4 2019-01-05 0 NA
Примечание
Lines <- "day maj price
2019-01-02 1 1435
2019-01-03 0 1435
2019-01-04 0 1435
2019-01-05 0 1435"
DF <- read.table(text = Lines, header = TRUE, strip.white = TRUE)
DF$day <- as.Date(DF$day)