使用datetime回溯周期记录事件是否在r中发生

使用datetime回溯周期记录事件是否在r中发生,r,datetime,dplyr,mutate,R,Datetime,Dplyr,Mutate,我想转换此数据帧: library(tidyverse) library(lubridate) EVENT <- c("HR", "RR", "HR, "CREATITINE", "HR") DATETIME <- c("2019-08-01 00:00:01", "2019-08-01 00:30:00", "2019-08-01 01:30:

我想转换此数据帧:

library(tidyverse)
library(lubridate)
EVENT <- c("HR", "RR", "HR, "CREATITINE", "HR")
DATETIME <- c("2019-08-01 00:00:01", "2019-08-01 00:30:00", "2019-08-01 01:30:00", "2019-08-01 02:00:00", "2019-08-01 05:00:00")         
LOOK_BACK_HOURS <- c(1,1,1,3,1)     
df <- data.frame(EVENT, DATETIME, LOOK_BACK_HOURS) 
df <- df %>% 
  mutate(DATETIME = ymd_hms(DATETIME))
库(tidyverse)
图书馆(lubridate)

事件您可以创建这样的函数,并可以使用
purrr::map
获取所需的数据帧

为了找出时间范围,我根据
LOOK\u BACK\u HOURS
创建了一个新列。有了它,我将检查不同事件的给定时间是否在此范围内,如果是,我将添加一个标志

库(tidyverse)
图书馆(lubridate)
#> 
#>附加包装:“lubridate”
#>以下对象已从“package:base”屏蔽:
#> 
#>日期、相交、设置差异、联合
事件标志计数
ifelse(标志计数>0,1,0)
}
df%>%
变异(回顾时间=日期时间-(回顾时间*60*60),
HR_标志=pmap_dbl(列表(回望时间、日期时间、“HR”)、标志),
RR_标志=pmap_dbl(列表(回望时间,日期时间,“RR”),标志),
CREATITINE_FLAG=pmap_dbl(列表(回望时间、日期时间,“CREATITINE”),FLAG))%>%
选择(-look\u back\u time)
#>事件日期时间回望时间HR标志RR标志
#>1小时2019-08-01 00:00:01 11 0
#>2 RR 2019-08-01 00:30:00 11
#>3小时2019-08-01 01:30:00 1
#>4肌酐2019-08-01 02:00:00 3 1
#>5小时2019-08-01 05:00:00 11 0
#>肌酸激酶
#> 1               0
#> 2               0
#> 3               0
#> 4               1
#> 5               0

由(v0.3.0)于2021-02-18创建的您能解释一下
HR\u标志
RR\u标志
CREATININE\u标志
背后的逻辑吗?该标志将指示在回顾期间是否发生过此类事件。不需要计算特定类型事件发生的次数,仅在事件发生与否的情况下。回顾期是什么意思?回顾期包括datetime-回顾小时后发生的观察。因此,如果我正在查看发生在下午5点的人力资源观察,并且人力资源的回顾时间为1,我想标记是否有任何其他事件发生在下午4点到下午5点之间。感谢您提供的解决方案。我在一个小样本上试用了它,效果很好。它目前正在搅拌大约400000行,已经运行了大约30分钟。这让我想知道,对于这种操作,我们是否可以使用多核?是的,这种解决方案效率不高,您可以将数据帧的过滤从函数中取出,而是分别为每个标志传递一个过滤数据向量。然后您可以看到用于并行化此代码的
furr
包。