如何为病房扫描数据按房间每日新增当日起止时间记录
计算病房无人值守分钟数:添加每日起止时间记录的方法
我的数据集记录了护士在病房的扫描时间,目标是计算病房的无人值守分钟数。首先需要为每个房间的每一天新增两行记录,分别代表当日的开始时间(00:00:00)和结束时间(23:59:59)。例如,若room1在2023-04-24的最后一次扫描是下午3点,我们需要计算2023-04-24 15:00:00到2023-04-24 23:59:59之间的分钟数。
原始数据
Room ScanDT 1 room1 2023-04-24 10:08:38 2 room1 2023-04-24 10:09:36 3 room1 2023-04-24 11:54:35 4 room1 2023-05-24 13:51:10 5 room2 2023-04-24 18:51:10 6 room2 2023-04-24 20:51:10
期望输出数据
Room ScanDT NewRecord 1 room1 2023-04-24 00:00:00 New 2 room1 2023-04-24 10:08:38 Old 3 room1 2023-04-24 10:09:36 Old 4 room1 2023-04-24 11:54:35 Old 5 room1 2023-04-24 23:59:59 New 6 room1 2023-05-24 00:00:00 New 7 room1 2023-05-24 13:51:10 Old 8 room1 2023-05-24 23:59:59 New 9 room2 2023-04-24 00:00:00 New 10 room2 2023-04-24 18:51:10 Old 11 room2 2023-04-24 20:51:10 Old 12 room2 2023-04-24 23:59:59 New
示例数据与解决方案代码
示例数据定义
df <- data.frame(Room = c('room1', 'room1', 'room1', 'room1', 'room2', 'room2'), ScanDT = as.POSIXct(c('2023-04-24 10:08:38', '2023-04-24 10:09:36', '2023-04-24 11:54:35', '2023-05-24 13:51:10', '2023-04-24 18:51:10', '2023-04-24 20:51:10')))
处理代码
# 加载所需工具包 library(dplyr) library(lubridate) # 数据处理流程 result <- df %>% # 提取日期作为分组依据 mutate(Date = as.Date(ScanDT)) %>% group_by(Room, Date) %>% # 为每个分组生成当日起止时间记录并合并 group_modify(~ { # 构造当日起始和结束时间 start_time <- ymd_hms(paste(.y$Date, "00:00:00")) end_time <- ymd_hms(paste(.y$Date, "23:59:59")) # 合并新生成的起止记录与原始记录 bind_rows( data.frame(Room = .y$Room, ScanDT = start_time, NewRecord = "New"), .x %>% mutate(NewRecord = "Old"), data.frame(Room = .y$Room, ScanDT = end_time, NewRecord = "New") ) }) %>% # 取消分组,按房间和时间排序 ungroup() %>% arrange(Room, ScanDT) %>% # 移除临时日期列 select(-Date) # 输出结果 print(result)
代码说明
- 先通过
as.Date()提取扫描时间的日期部分,按房间和日期分组; - 对每个分组,构造当日00:00:00和23:59:59的时间记录,标记为"New";
- 将新记录与原始记录(标记为"Old")合并;
- 最后按房间和时间排序,得到符合要求的数据集。
内容的提问来源于stack exchange,提问作者mar355
相关产品推荐
相关产品推荐

