首页 > 解决方案 > 如何从 R 下的时间序列数据中识别降雨“非事件”?

问题描述

我的目标是从时间序列数据中识别降雨“非事件”。降雨“非事件”定义为“6 小时内降雨(降雨累积)之和小于 1.27 毫米”。

我用 loreabad6 为这个问题提供的解决方案启发了我的脚本(我的目标并不完全相同):

首先,我使用了每 36 行的移动总和(36 * 10 分钟间隔)(请参阅下面脚本中(“rollsum”列)中的第 2.1 节)

然后,我想为在“rainflag”列的行中找到的每个第一个“1”(在第 2.2 节中计算)重复数字“1”36 次,如果我在第 36 行之后找到另一个数字“1”(当有几个成功的降雨“非事件”),我将开始将数字 1 放置 36 次,依此类推......(步骤 2.3)。其余行取值“0”。

                       **Edit** 

我想在最后计算“no_event”列,如附件所示。在这个例子中,我只用 3 个值表示了 36 小时的持续时间。

在此处输入图像描述

请您在步骤 2.3 中帮助我,使用什么逻辑来识别降雨“无事件”!

先感谢您

我的脚本:

#  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)

标签: rdplyrstatisticszoo

解决方案


推荐阅读