首页 > 解决方案 > 在日期滞后内计算每组的记录

问题描述

我有一个结构如下的大型数据集

dat <- data.frame("Date" = c("2017-01-01", "2017-01-20", "2017-04-15", "2017-11-03", "2018-01-03", "2019-12-12", "2020-03-07", "2014-05-19", "2009-07-03", "2010-02-04"), 
                  "Region" = c("Adelaide", "Albany", "Albany", "Albany", "Albany", "Albany", "Albany", "Middleton", "Alice Springs", "Alice Springs"))

dat$Date <- as.Date(dat$Date, "%Y-%m-%d")

对于每条记录,如果它们在前 12 个月内并且仅当它们在同一区域内时,我想计算它们的数量记录。任何帮助实现这一目标将不胜感激?

我的最终数据集应该看起来与原始数据集相同,但添加了以下计数列

dat$Count <- c(0, 0, 1, 2, 3, 0, 1, 0, 0, 1)

此计数列显示,对于数据集中的第一条记录,在过去 12 个月中没有来自同一地区的其他记录,但是对于数据集中的第 5 条记录,在过去 12 个月中出现的其他 3 条记录同一地区。

dplyr我在使用中尝试了一系列解决方案group_by(),但还没有接近我的意图。count()summarise()

标签: r

解决方案


对于每个Region日期,您可以获取当前日期与所有其他日期的差值,并计算 0 到 365 天之间的日期数。

library(dplyr)
library(purrr)

dat %>%
  group_by(Region) %>%
  mutate(Count = map_dbl(row_number(), 
                   ~sum(between(Date[.x] - Date[-.x], 0, 365)))) %>%
  ungroup

#    Date       Region        Count
#   <date>     <chr>         <dbl>
# 1 2017-01-01 Adelaide          0
# 2 2017-01-20 Albany            0
# 3 2017-04-15 Albany            1
# 4 2017-11-03 Albany            2
# 5 2018-01-03 Albany            3
# 6 2019-12-12 Albany            0
# 7 2020-03-07 Albany            1
# 8 2014-05-19 Middleton         0
# 9 2009-07-03 Alice Springs     0
#10 2010-02-04 Alice Springs     1

推荐阅读