r - 如何从 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)
解决方案
推荐阅读
- javascript - 尝试通过引用单独的 json 来设置值
- c - c中的注册功能
- lua - Roblox 如何检测玩家的团队
- python - 在嵌套的字符串列表中查找唯一元素
- html - rtf(富文本格式)base64数据在angular 6 html上显示
- php - 调用未定义的方法 Illuminate\Database\Eloquent\Builder::pullCache()
- reactjs - React 条件渲染中的表迭代
- typescript - 有条件继承可能吗?
- javascript - 如何将数据从 api 传递到 gojs TreeModel
- javascript - 使用 csv-parser 解析 csv 后如何获取输出?