Моя цель состоит в том, чтобы идентифицировать «не-события» осадков по данным временного ряда. «не-события» дождя определяются, когда «сумма осадков (накопление осадков) в течение 6 часов составляет менее 1,27 мм».
Я вдохновил свой сценарий решением loreabad6, предоставленным для этого вопроса (моя цель не совсем та же):
Во-первых, я использовал скользящую сумму для каждых 36 строк (интервал 36 * 10 минут) (см. Раздел 2.1 в (столбец "rollsum") в сценарии ниже)
Затем я хотел бы повторить число «1» для 36 раз для каждого первого «1», найденного в строках столбца «rainflag» (рассчитывается в разделе 2.2), и если я найду другое число «1» после строки 36 (когда есть несколько «не-событий» дождевых осадков, которые будут успешными), я начну ставить число 1 также на 36 раз и так далее… (шаг 2.3). Остальные строки принимают значение «0».
**Edit**
В конце я хочу вычислить столбец «no_event», показанный во вложении. В этом примере я представил продолжительность 36 часов только тремя значениями.
Можете ли вы помочь мне, пожалуйста, на шаге 2.3, что такое лог c использовать для того, чтобы определить количество осадков "без событий"!
Заранее спасибо
Мой сценарий:
# data example
library (RainfallErosivityFactor)
data (RainFallExample, package="RainfallErosivityFactor")
data=RainFallExample
head(data)
library(dplyr);library(zoo)
#1# Concatenate date and hour :
data0=mutate(data, datetime= as.POSIXct(paste(date,Hora), format = '%d/%m/%Y %H:%M'))
head(data0)
#2# Estimate the "non avent" rainfall = rainfall Sum during 6 hours < 1.27mm
flags <- data0 %>%
#2.1# rollsum each 36 (6 hours = 36 * (10 min))
mutate(rollsum=rollapplyr(rainfall, 36, sum, fill = NA, align = "left")) %>%
#2.2# Set a rain flag : if the rollsum >1.27 we give the value 0 otherwise 1
mutate(rainflag = ifelse(rollsum > 1.27, 0, 1)) %>%
#2.3.
mutate(no_event = ifelse(rainflag==1, rollapplyr(rainflag, 36, sum, fill = NA, align = "right"), 0))
head(flags)
View(flags)