【问题标题】:Group data by group of days within months in R在R中按月内的天分组数据
【发布时间】:2019-09-21 10:36:48
【问题描述】:

我正在尝试按每个月内的 10 天时间组来总结这个每日降雨时间序列,并计算累积降雨量。

library(tidyverse)
(dat <- tibble(
  date = seq(as.Date("2016-01-01"), as.Date("2016-12-31"), by=1),
  rainfall = rgamma(length(date), shape=2, scale=2)))

因此,我将获得第三组沿年的变异性,例如:1 月第三个周期有 11 天,2 月有 9 天,以此类推。这是我的尝试:

library(lubridate)
dat %>% 
  group_by(decade=floor_date(date, "10 days")) %>%
  summarize(acum_rainfall=sum(rainfall), 
            days = n())

这是结果输出

# A tibble: 43 x 3
   decade     acum_rainfall  days
   <date>             <dbl> <int>
 1 2016-01-01         48.5     10
 2 2016-01-11         39.9     10
 3 2016-01-21         36.1     10
 4 2016-01-31          1.87     1
 5 2016-02-01         50.6     10
 6 2016-02-11         32.1     10
 7 2016-02-21         22.1      9
 8 2016-03-01         45.9     10
 9 2016-03-11         30.0     10
10 2016-03-21         42.4     10
# ... with 33 more rows

有人可以帮我将残差周期与第三个周期相加,以在每个月内始终获得 3 个周期吗?这将是所需的输出(注意第 3 行):

   decade     acum_rainfall  days
   <date>             <dbl> <int>
 1 2016-01-01         48.5     10
 2 2016-01-11         39.9     10
 3 2016-01-21         37.97    11
 4 2016-02-01         50.6     10
 5 2016-02-11         32.1     10
 6 2016-02-21         22.1      9

【问题讨论】:

    标签: r time-series lubridate


    【解决方案1】:

    一种方法是使用if_else 来应用floor_date 并根据date 的日期值使用不同的参数。如果day(date) = 30,则使用'20 days' 以确保它四舍五入到第 21 天:

    dat %>% 
        group_by(decade=if_else(day(date) >= 30,
                                floor_date(date, "20 days"),
                                floor_date(date, "10 days"))) %>%
        summarize(acum_rainfall=sum(rainfall), 
                  days = n())
    
    # A tibble: 36 x 3
       decade     acum_rainfall  days
       <date>             <dbl> <int>
     1 2016-01-01          38.8    10
     2 2016-01-11          38.4    10
     3 2016-01-21          43.4    11
     4 2016-02-01          34.4    10
     5 2016-02-11          34.8    10
     6 2016-02-21          25.3     9
     7 2016-03-01          39.6    10
     8 2016-03-11          53.9    10
     9 2016-03-21          38.1    11
    10 2016-04-01          36.6    10
    # … with 26 more rows
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      • 2021-03-03
      相关资源
      最近更新 更多