R 函数对连续值进行求和/计数 - 降雨指数

问题描述 投票:0回答:1

我想使用包含年、日和降雨量值的数据框来计算一些降雨指数。

如何计算最大5天连续降水量(R5d)? 最多连续降雨天数(降雨量大于0毫米)? 最多连续无降雨天数(降雨量 0 毫米)? 年总降雨量超过 95%?

我尝试了以下 R5d 代码,但它不起作用,因为它对从 1 到 5、从 6 到 10 等的天数求和。 我想要第 1 到 5 天、第 2 到 6 天、第 3 到 7 天等等的总和。

    year=c(rep(2000,360),rep(2001,360))
    day=rep(1:360,2)
    rainfall<-rpois(360*2,0:100)
    df5=data.frame(year,day,rainfall)
    head(df5)
    
    #Sum values 5 by 5
    library(dplyr)
    sum5=df5 %>%
    mutate(Intervals_by5 = rep(row_number(), each=5, length.out = n())) %>%
    group_by(Intervals_by5) %>%
    summarise(Freq_sum = sum(rainfall))
    max(sum5)

非常感谢!

r dplyr count time-series countif
1个回答
0
投票

您可以使用滑动窗口:

library(dplyr)
library(slider)

year <- c(rep(2000, 360), rep(2001, 360))
day <- rep(1:360, 2)
rainfall <- rpois(360 * 2, 0:100)
df5 <- data.frame(year, day, rainfall)

new_df <- df5 %>%
  mutate(sliding_sum = slide_dbl(rainfall, sum, .before = 4, .complete = TRUE))

head(new_df, 30)
#>    year day rainfall sliding_sum
#> 1  2000   1        0          NA
#> 2  2000   2        0          NA
#> 3  2000   3        6          NA
#> 4  2000   4        2          NA
#> 5  2000   5        4          12
#> 6  2000   6        8          20
#> 7  2000   7        2          22
#> 8  2000   8        8          24
#> 9  2000   9        8          30
#> 10 2000  10        9          35
#> 11 2000  11        6          33
#> 12 2000  12        9          40
#> 13 2000  13        6          38
#> 14 2000  14        7          37
#> 15 2000  15        9          37
#> 16 2000  16       20          51
#> 17 2000  17       18          60
#> 18 2000  18       22          76
#> 19 2000  19       14          83
#> 20 2000  20       23          97
#> 21 2000  21       21          98
#> 22 2000  22       20         100
#> 23 2000  23       18          96
#> 24 2000  24       19         101
#> 25 2000  25       19          97
#> 26 2000  26       29         105
#> 27 2000  27       27         112
#> 28 2000  28       26         120
#> 29 2000  29       32         133
#> 30 2000  30       28         142

创建于 2024-03-23,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.