R 中的每日时间序列数据中连续逐年存在

Amr*_*rit 4 r time-series

我有 60 年来关于 400 个站点是否有降雨的每日时间序列数据。数据采用以下格式,其中在第二列中,1 表示存在,0 表示不存在:

Date         Rainfall
---------------------
1981-01-01   0
1981-01-02   0
1981-01-03   0
1981-01-04   1
1981-01-05   0
1981-01-06   1
1981-01-07   1
1981-01-08   1
1981-01-09   0
1981-01-10   0
1981-01-11   1
1981-01-12   1
1981-01-13   1
1981-01-14   1
1981-01-15   1
1981-01-16   0
..........   .
Run Code Online (Sandbox Code Playgroud)

现在我要计算每年至少连续3天降雨的连续潮湿天数以及一年中连续降雨天数最长的天数。如果连续 3 天或超过 3 天(任意数量)收到降雨,我会将其视为单一事件。

我的输出将是这样的

Year      No of consecutive wet-days   longest consecutive wet-days
1981      2                            5
.
.
Run Code Online (Sandbox Code Playgroud)

我们如何在 R 中做到这一点?如果我能解出一个站,我就可以迭代 R 中的所有站。

预先感谢您的帮助 :)

Pau*_*ulS 5

另一个可能的解决方案(我感谢@DarrenTsai 的评论,它改进了这个解决方案):

\n
library(tidyverse)\nlibrary(lubridate)\n\ndf %>% \n  group_by(Year = year(ymd(Date))) %>%\n  mutate(x = list(rle(Rainfall))) %>% \n  summarise(ncons = sum(x[[1]]$lengths >= 3 & x[[1]]$values == 1),\n            longest = ifelse(sum(x[[1]]$values == 1) == 0, 0, \n                max(x[[1]]$lengths[x[[1]]$values == 1])))\n\n#> # A tibble: 2 \xc3\x97 3\n#>    Year ncons longest\n#>   <dbl> <int>   <int>\n#> 1  1981     2       5\n#> 2  1982     2       4\n
Run Code Online (Sandbox Code Playgroud)\n