Как определить «не-события» количества осадков по данным временного ряда в R? - PullRequest
1 голос
/ 21 апреля 2020

Моя цель состоит в том, чтобы идентифицировать «не-события» осадков по данным временного ряда. «не-события» дождя определяются, когда «сумма осадков (накопление осадков) в течение 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 часов только тремя значениями.

enter image description here

Можете ли вы помочь мне, пожалуйста, на шаге 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)
...