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

Databricks中R脚本:按pid-med组调整difftime最后输出为24小时

问题:按pid-med组计算时间间隔并设置组内最后一条记录为24小时

需求描述

  • 按pid、med、date1对数据排序后,计算相邻date1条目之间的小时时间间隔
  • 每个由相同pid和med构成的组中,将最后一条date1记录对应的hours_output手动设置为24小时;当pid或med变更时,终止前一个组并将其最后值设为24

原始数据

df <- data.frame(
  pid = c(1,1,1,1,1),
  med = c("drugA", "drugA", "drugA", "drugB", "drugB"),
  date1 = as.POSIXct(c(
    "2023-02-02 09:00:00",
    "2023-02-02 12:00:00",
    "2023-02-02 14:00:00",
    "2023-02-03 10:00:00",
    "2023-02-03 18:00:00"
  ))
)

尝试的代码

df1 <- df %>%
  arrange(pid, med, date1) %>%
  mutate(hours_output = as.numeric(difftime(lead(date1), date1, units = "hours")))

# Replace the last duration value with 24 hours
df1$hours_output[last(nrow(df1))] <- 24

df1 <- df1 %>% select(med, date1, hours_output)
head(df1)

实际输出

pid    med               date1 hours_output
1   1 drugA 2023-02-02 09:00:00          3.00
2   1 drugA 2023-02-02 12:00:00          2.00
3   1 drugA 2023-02-02 14:00:00         20.00
4   1 drugB 2023-02-03 10:00:00          8.00
5   1 drugB 2023-02-03 18:00:00         18.00

期望输出

pid    med               date1 hours_output
1   1 drugA 2023-02-02 09:00:00          3.00
2   1 drugA 2023-02-02 12:00:00          2.00
3   1 drugA 2023-02-02 14:00:00         24.00
4   1 drugB 2023-02-03 10:00:00          8.00
5   1 drugB 2023-02-03 18:00:00         24.00

解决方案

原代码仅修改了整个数据集的最后一行,未按pid+med分组处理。通过group_by()实现组内独立计算,再针对组内最后一行设置24小时即可:

library(dplyr)

df1 <- df %>%
  arrange(pid, med, date1) %>%
  group_by(pid, med) %>%
  mutate(
    hours_output = as.numeric(difftime(lead(date1), date1, units = "hours")),
    # 组内最后一行替换为24小时
    hours_output = ifelse(row_number() == n(), 24, hours_output)
  ) %>%
  ungroup() %>%
  select(pid, med, date1, hours_output)

print(df1)

代码说明

  1. group_by(pid, med):按患者ID和药物分组,保证每个组的处理互不干扰
  2. row_number() == n():判断当前行是否为组内最后一行(n()返回组内总条数)
  3. ifelse逻辑:组内最后一行强制设为24,其余行保留计算的小时间隔
  4. ungroup():取消分组状态,避免影响后续数据操作

运行后即可得到符合要求的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:35:19