【发布时间】:2023-03-26 23:56:01
【问题描述】:
我正在开展一个项目,在该项目中,我只需要包含至少间隔 12 小时进行实验室测试的患者,并保留每个包含的实验室测试的时间戳。问题是许多患者在 12 小时内完成了多个实验室,但客户要求不包括这些测试。我已经做到了这一点:
#Create dummy dataset
df = data.frame(
"Encounter" = c(rep("12345", times=16), rep("67890", times = 5)),
"Timestamp" = c("01/06/2022 04:00:00", "01/07/2022 08:00:00",
"01/08/2022 00:00:00", "01/08/2022 04:00:00",
"01/08/2022 08:00:00", "01/08/2022 20:00:00",
"01/09/2022 04:00:00", "01/09/2022 08:00:00",
"01/09/2022 20:00:00", "01/09/2022 23:26:00",
"01/10/2022 00:00:00", "01/10/2022 08:00:00",
"01/10/2022 20:00:00", "01/11/2022 00:00:00",
"01/11/2022 20:00:00", "01/12/2022 04:00:00",
"11/10/2021 11:00:00", "11/10/2021 12:00:00",
"11/10/2021 13:00:00", "11/10/2021 14:00:00",
"11/11/2021 00:00:00"))
#Convert timestamp to POSIXlt format
df$Timestamp <- strptime(as.character(df$Timestamp), format="%m/%d/%Y %H:%M")
#Calculate time (in hours) between each previous timestamp by Encounter
df <- df %>%
group_by(Encounter) %>%
arrange(Encounter, Timestamp) %>%
mutate(difftime(Timestamp, lag(Timestamp), units="hours"))
我似乎不知道下一步该做什么。似乎我需要计算一个滚动的 12 小时,然后在一行达到 12 小时后重置为 0,但我不知道该怎么做。以下是我的理想结果:
df$Keep.Row <- c(1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,0,1)
【问题讨论】:
-
您正在寻找
zoo::rollapply。帮助中有一个如何使用时间窗口的示例。
标签: r timestamp rolling-computation