r - 在日期滞后内计算每组的记录
问题描述
我有一个结构如下的大型数据集
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()
解决方案
对于每个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
推荐阅读
- php - 更改PHP包含文件onclick?
- javascript - 使用jQuery提交输入后如何防止键盘消失
- r - 在 R 中调用函数,参数以数组形式给出
- vue.js - 我无法加载 vuejs 登录的 js
- javascript - RN Picker Select 不会选择与已经显示的值相似的选项 - 尽管使用了键
- java - 在 Spring Boot 应用程序中出现新数据库错误
- hibernate - 父子实体保存失败并出现列缺失错误
- angular - 如何从角度的垫单选按钮中删除悬停颜色?
- domain-driven-design - DDD - 保持反比关系
- date - 需要帮助根据日期字段是否为空的条件拉一行