Я хочу подсчитать количество последовательных наблюдений, соответствующих условию. Например. Ниже foo
я хотел бы подсчитать количество дней в марте, когда последовательные значения y
меньше, чем одно стандартное отклонение от среднего значения y
для этого месяца. Мои данные выложены как foo
:
library(lubridate)
foo <- data.frame(x=seq.Date(as.Date("1981/1/1"),
as.Date("2000/12/31"), "day"))
foo$y <- arima.sim(n = nrow(foo), list(ar = c(0.8)))
Я выяснил, как подсчитать количество дней в марте для каждого года, где y
более чем на одно стандартное отклонение ниже среднего:
bar <- foo %>% filter(month(x) == 3 & y < mean(y)-sd(y)) %>%
group_by(year(x)) %>% tally()
Я бы хотел, чтобы это количество было только в том случае, если дни, соответствующие условию, являются последовательными. Например, если средняя температура для марта равна 0, а среднеквадратичное значение равно 1, а 5, 6 и 7 марта в 1990 году все ниже -1, то в 1990 году число будет равно 3. Если 21 марта также будет <-1 но 20 и 22 марта не <-1, число все равно будет равно 3, потому что 21 марта нет соседей, которые также <-1. </p>
Я представляю, rle
входит в игру, но я не понимаю, как.
Любой совет приветствуется.