You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为病房扫描数据按房间每日新增当日起止时间记录

计算病房无人值守分钟数:添加每日起止时间记录的方法

我的数据集记录了护士在病房的扫描时间,目标是计算病房的无人值守分钟数。首先需要为每个房间的每一天新增两行记录,分别代表当日的开始时间(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)

代码说明

  1. 先通过as.Date()提取扫描时间的日期部分,按房间和日期分组;
  2. 对每个分组,构造当日00:00:00和23:59:59的时间记录,标记为"New";
  3. 将新记录与原始记录(标记为"Old")合并;
  4. 最后按房间和时间排序,得到符合要求的数据集。

内容的提问来源于stack exchange,提问作者mar355

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:10:32