如何在Rstudio中对翻斗式雨量计数据执行滚动条件计算?

scyqe7ek  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(118)

我目前正在编写一个R脚本,用于分析从国家森林中收集的翻斗式雨量计数据。这些翻斗式雨量计的设计目的是每个桶尖收集0.01英寸的水,并在发生时线性计数。例如,在检索一个雨量计时,计数为5.00,这意味着桶倾斜了500次,并收集了5.00英寸的雨水。
在这个R脚本中,我想分析瞬时高强度降雨事件的数据。这些降雨事件的特征是在15分钟内收集>= 0.25英寸的水。这个数据集相当大,所以手工识别这些事件是不切实际的。我想知道是否有可能创建一个窗口大小为15分钟的滚动计算。这个滚动求和将使用两列,一列为DateTime(POSIXct),一列为事件提示(double)。窗口将在0:00时获取提示,并从15:00时的提示中减去该提示,从而得到该15分钟窗口中的总降雨量。这将向前滚动,直到数据集完成。理想的输出是double类型的列,该列给出每个15分钟段中的总降雨量。或者,新列可以是逻辑类型,如果窗口>= 0.25英寸,则输出TRUE。
Segment of Data in Rstudio
这是R中的一小部分数据。主要问题之一是行/提示之间的时间间隔不一致。在部署期间,有些日子可能会完全跳过。如果您有任何想法,建议和/或解决方案,请让我知道。
祝你今天愉快!

pbossiut

pbossiut1#

您可以创建一个包含两列的新数据框。第一列称为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))

相关问题