r - 在 R 中,使用日期范围内的事件计数创建变量

标签 r date dplyr

背景

我有一个 R 数据框 d:

d <- data.frame(ID = c("a","a","b","b", "c","c","c"),
                event = c(1,1,0,0,1,1,1),
                event_date = as.Date(c("2011-01-01","2012-08-21","2011-12-23","2011-12-31","2013-03-14","2013-04-07","2014-07-14")),
                stringsAsFactors=FALSE)

如您所见,ID 列中有 3 个不同的人,他们要么参加过,要么没有参加过事件,并附有事件日期状态已记录 (event_date)。

问题

我想创建一个新的变量/列,event_within_interval,它将 1 分配给给定 ID所有单元格,如果该ID第一个事件=1后的180天内发生了2个或更多事件=1。

让我进一步解释一下:ID=aID=c 各有 2 个或更多事件,但只有 ID=c 有他们在第一次事件后 180 天内的第二次事件(因此,对于 ID=c 来说,2013 年 4 月 7 日 - 2013 年 3 月 14 日 = 24 天)。

问题是我不确定如何告诉 R “如果第二个事件发生在第一个 event=1 后的 180 天内”。

我想要什么

这是我正在寻找的内容:

want <- data.frame(ID = c("a","a","b","b","c","c","c"),
                event = c(1,1,1,0,0,1,1),
                event_date = as.Date(c("2011-01-01","2012-08-21","2011-12-23","2011-12-31","2013-03-14","2013-04-07","2014-07-14")),
                event_within_interval = c(0,0,0,0,1,1,1),
                stringsAsFactors=FALSE)

我尝试过的

到目前为止我才刚刚开始尝试:

d <- d %>% 
  mutate(event_within_interval = ID %in% if_else(d$event == 1, 1, 0))

但这并没有给我我想要的东西,因为如果你运行代码你就可以知道。

我已将其设置为 if_else,但我不确定从这里开始到哪里。

更新:我编辑了两个可重现的示例(我所拥有的和我想要的),以强调所需的日期间隔必须位于第一个事件和第二个事件之间的事实,不是第一个事件和最后一个事件。 (一些用户使用 last 提交了示例,该示例适用于可重现示例的上一次迭代,但不适用于真实数据集。)

最佳答案

使用lubridatedata.table包怎么样?

library(data.table)
library(lubridate)

d <- data.frame(ID = c("a","a","b","b", "c","c"),
                event = c(1,1,0,0,1,1),
                event_date = as.Date(c("2011-01-01","2012-08-21","2011-12-23","2011-12-31","2013-03-14","2013-04-07")),
                stringsAsFactors=FALSE)

d <-  data.table(d)

d <- d[, event_within_interval := 0]

timeInterval <- interval(start = "2013-03-14", end = "2013-04-07")

d <- d[event == 1 & event_date %within% timeInterval, event_within_interval := 1]

d
#    ID event event_date event_within_interval
# 1:  a     1 2011-01-01                     0
# 2:  a     1 2012-08-21                     0
# 3:  b     0 2011-12-23                     0
# 4:  b     0 2011-12-31                     0
# 5:  c     1 2013-03-14                     1
# 6:  c     1 2013-04-07                     1

关于r - 在 R 中,使用日期范围内的事件计数创建变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71291901/

相关文章:

mysql - SQL Select - 复杂查询中的日期比较

r - 在嵌套数据框中应用 purrr::map() 的问题

dplyr 的相对频率/比例

r - 如何使用多字节分隔符将文本文件读入 GNU R?

R 绘图 + Shiny 的 react 耦合事件 - 通过单击同一图表来刷新带有参数的图表

r - 为什么 rle 不接受一个因素作为输入?

r - dplyr group_by 函数出错,找不到对象

r - 在 R 中从文字字符串数字传递到数字

r - R中的排序月份

ruby - 如何从可能具有前导零的字符串中解析数字?