我有 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 中的所有站。
预先感谢您的帮助 :)
另一个可能的解决方案(我感谢@DarrenTsai 的评论,它改进了这个解决方案):
\nlibrary(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\nRun Code Online (Sandbox Code Playgroud)\n