在 R 中,为日期分配一个数字,其中数字对应于包含该日期的年份中的第 n 个滚动、非重叠期间

  • 本文关键字:日期 数字 重叠 滚动 分配 一个 于包含 r
  • 更新时间 :
  • 英文 :


我需要在庞大的数据集中计算滚动但不重叠的 7 天均值,以便我可以计算每个站点的 7 天均值超过(高于某个阈值的均值(的次数。 数据集如下所示:

STATION  DATE         VALUE
A   1/15/2010   4
A   1/18/2010   5
A   1/25/2011   2
A   1/30/2011   1
A   2/2/2011    14
B   5/6/2012    6
B   5/14/2012   4
B   5/17/2012   3
B   1/29/2013   16

我希望它看起来像这样:

STATION DATE         VALUE  7DAYPERIOD  YEAR-7DAYPERIOD
A   1/15/2010   4   1   2010-1
A   1/18/2010   5   1   2010-1
A   1/25/2011   2   1   2011-1
A   1/30/2011   1   1   2011-1
A   2/2/2011    14  2   2011-2
B   5/6/2012    6   1   2012-1
B   5/14/2012   4   2   2012-2
B   5/17/2012   3   2   2012-2
B   1/29/2013   16  1   2013-1

其中"7DAYPERIOD"对应于相对于电台一年中最早日期的第n个非重叠的7天周期。 然后,我将用这个数字("YEAR-7DAYPERIOD"(连接年份,然后按此标识符和站点进行聚合,以计算每个站点的平均值。

最初认为润滑"周"可以帮助我解决这个问题。 但是"周"给出了一个相对于 1 月 1 日的数字。 我需要该数字相对于数据集中表示的年份中的最早日期,并使其特定于台站。

这将重现您的示例,但您没有任何处理年份边界的情况。我们可以用 %/% 进行整数除法,以计算自一年中第一个日期以来整整 7 天的周期数。隐含地,因为我们同时group_by STATIONYEAR,这将缩短跨年年底的任何 7 天期限(如果您聚合这些值,这可能会产生影响(。

library(tidyverse)
library(lubridate)
tbl <- read_table2(
"STATION  DATE         VALUE
A   1/15/2010   4
A   1/18/2010   5
A   1/25/2011   2
A   1/30/2011   1
A   2/2/2011    14
B   5/6/2012    6
B   5/14/2012   4
B   5/17/2012   3
B   1/29/2013   16"
)
tbl %>%
  mutate(
    DATE = mdy(DATE),
    YEAR = year(DATE)
  ) %>%
  group_by(STATION, YEAR) %>%
  mutate(
    `7DAYPERIOD` = as.integer(DATE - first(DATE)) %/% 7 + 1,
    `YEAR-7DAYPERIOD` = str_c(YEAR, "-", `7DAYPERIOD`)
  )
#> # A tibble: 9 x 6
#> # Groups:   STATION, YEAR [4]
#>   STATION DATE       VALUE  YEAR `7DAYPERIOD` `YEAR-7DAYPERIOD`
#>   <chr>   <date>     <dbl> <dbl>        <dbl> <chr>            
#> 1 A       2010-01-15     4  2010            1 2010-1           
#> 2 A       2010-01-18     5  2010            1 2010-1           
#> 3 A       2011-01-25     2  2011            1 2011-1           
#> 4 A       2011-01-30     1  2011            1 2011-1           
#> 5 A       2011-02-02    14  2011            2 2011-2           
#> 6 B       2012-05-06     6  2012            1 2012-1           
#> 7 B       2012-05-14     4  2012            2 2012-2           
#> 8 B       2012-05-17     3  2012            2 2012-2           
#> 9 B       2013-01-29    16  2013            1 2013-1

创建于 2019-05-28 由 reprex 软件包 (v0.3.0(

最新更新