如果观察结果落在日期窗口中,则进行计数

Posted

技术标签:

【中文标题】如果观察结果落在日期窗口中,则进行计数【英文标题】:Tally if observations fall in date windows 【发布时间】:2022-01-16 23:47:35 【问题描述】:

我有一个数据框,它表示具有开始日期和结束日期的政策。我正在尝试统计每月有效的政策数量。

library(tidyverse)

ayear <- 2021
amonth <- 10
months <- 12

df <- tibble(
  pol = c(1, 2, 3, 4)
  , bdate = c('2021-02-23', '2019-12-03', '2020-08-11', '2020-12-14')
  , edate = c('2022-02-23', '2020-12-03', '2021-08-11', '2021-06-14')
  )

这四项政策都有开始日期 (bdate) 和结束日期 (edate)。从 2021 年 10 月 (amonth) (ayear) 开始到 12 个月 (months) 我正在尝试计算有多少4 个策略中有 4 个策略在本月的某个时间点处于活动状态,以生成一个看起来像这样的数据框。

我尝试生成的数据框将包含三列:月、年和 active_pol_count,共 12 行。像这样。

【问题讨论】:

请不要发布代码/数据/错误的图像:它会破坏屏幕阅读器并且无法复制或搜索(参考:meta.***.com/a/285557 和 xkcd.com/2116)。请直接包含代码、控制台输出或数据(例如,data.frame(...) 或来自dput(head(x)) 的输出)。 能否请您提供您的预期输出? @Peter 添加了-谢谢。 【参考方案1】:
library(tidyverse)
library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#> 
#>     date, intersect, setdiff, union

df <- tibble(
  pol = c(1, 2, 3, 4),
  bdate = c("2021-02-23", "2019-12-03", "2020-08-11", "2020-12-14"),
  edate = c("2022-02-23", "2020-12-03", "2021-08-11", "2021-06-14")
)

# transform star and end date to interval
df <- mutate(df, interval = interval(bdate, edate))

# for every first date of each month between 2020-10 to 2021-10 
seq(as.Date("2020-10-01"), as.Date("2021-09-01"), by = "months") %>%
  tibble(date = .) %>%
  mutate(
    year = year(date),
    month = month(date),
    active_pol_count = date %>% map_dbl(~ .x %within% df$interval %>% sum()),
  )
#> # A tibble: 12 x 4
#>    date        year month active_pol_count
#>    <date>     <dbl> <dbl>            <dbl>
#>  1 2020-10-01  2020    10                2
#>  2 2020-11-01  2020    11                2
#>  3 2020-12-01  2020    12                2
#>  4 2021-01-01  2021     1                2
#>  5 2021-02-01  2021     2                2
#>  6 2021-03-01  2021     3                3
#>  7 2021-04-01  2021     4                3
#>  8 2021-05-01  2021     5                3
#>  9 2021-06-01  2021     6                3
#> 10 2021-07-01  2021     7                2
#> 11 2021-08-01  2021     8                2
#> 12 2021-09-01  2021     9                1

由reprex package (v2.0.1) 于 2021 年 12 月 13 日创建

【讨论】:

谢谢! @danlooo

以上是关于如果观察结果落在日期窗口中,则进行计数的主要内容,如果未能解决你的问题,请参考以下文章

Matlab使用 MapReduce 创建直方图

如何在日期时间 Python 中获取值计数

四种限流算法原理

如果表中的日期时间列在特定时间段内,则根据记录计数

R - 每个ID和日期的计数观察[重复]

使用窗口函数计算滚动计数