我目前正在编写一个 R 脚本,用于分析从国家森林收集的翻斗式雨量计数据。这些翻斗式雨量计设计用于每个桶尖收集 0.01 英寸的水,并在发生时线性计数。例如,检索计量器后,计数为 5.00,这意味着水桶倾斜了 500 次,收集了 5.00 英寸的雨水。
在这个 R 脚本中,我想分析瞬时高强度降雨事件的数据。这些降雨事件的特点是在 15 分钟内收集 >= 0.25 英寸的水。该数据集非常大,因此手动识别这些事件是不切实际的。我想知道是否可以创建一个窗口大小为 15 分钟的滚动计算。此滚动总和将利用两列,一列日期时间 (POSIXct) 和一列事件提示(双精度)。该窗口将获取 0:00 的小费,并从 15:00 的小费中减去它,从而给出该 15 分钟窗口内的总降雨量。这将向前滚动,直到数据集完成。理想的输出是一个 double 类型的列,给出每个 15 分钟段的总降雨量。或者,新列可以是逻辑类型,如果窗口 >= 0.25 英寸,则输出 TRUE。
这是 R 中的一小部分数据。主要问题之一是行/提示之间的时间间隔不一致。部署期间可能会完全跳过某些日子。如果您有任何想法、建议和/或解决方案,请告诉我。
祝你有美好的一天!
您可以创建一个包含两列的新数据框。其中一个称为
start
,是从测量周期开始到结束每 15 分钟一次。第二列称为 stop
,与第一列相同,只是晚了 15 分钟。
然后,按行对数据框进行分组,只需计算开始时间和停止时间之间有多少个提示:
library(tidyverse)
tibble(start = seq(as.POSIXct('2023-06-08'), by = '15 min', len = 96 * 6),
stop = start + lubridate::minutes(15)) %>%
filter(complete.cases(.)) %>%
rowwise() %>%
mutate(tips = length(which(df$DateTime >= start & df$DateTime < stop)))
#> # A tibble: 576 x 3
#> # Rowwise:
#> start stop tips
#> <dttm> <dttm> <int>
#> 1 2023-06-08 00:00:00 2023-06-08 00:15:00 0
#> 2 2023-06-08 00:15:00 2023-06-08 00:30:00 0
#> 3 2023-06-08 00:30:00 2023-06-08 00:45:00 0
#> 4 2023-06-08 00:45:00 2023-06-08 01:00:00 1
#> 5 2023-06-08 01:00:00 2023-06-08 01:15:00 0
#> 6 2023-06-08 01:15:00 2023-06-08 01:30:00 0
#> 7 2023-06-08 01:30:00 2023-06-08 01:45:00 0
#> 8 2023-06-08 01:45:00 2023-06-08 02:00:00 0
#> 9 2023-06-08 02:00:00 2023-06-08 02:15:00 0
#> 10 2023-06-08 02:15:00 2023-06-08 02:30:00 0
#> # ... with 566 more rows
#> # i Use `print(n = ...)` to see more rows
使用的数据 - 使用 OCR 从相关数据图片中获取
df <- structure(list(DateTime = structure(c(1686182399, 1686231919,
1686515980, 1686516586, 1686580500, 1686581191, 1686582039, 1686585522,
1686586899, 1686587520, 1686588807, 1686589302, 1686589641, 1686639178,
1686640430, 1686641549, 1686643287, 1686645039, 1686646602, 1686657085,
1686658572, 1686660764, 1686660826, 1686660934), class = c("POSIXct",
"POSIXt"), tzone = ""), Event = c(0, 0.01, 0.02, 0.03, 0.04,
0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15,
0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -24L))