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

如何在R语言宽格式患者用药数据中识别药物及剂量随时间的变化?

问题描述

我有一个包含多名患者不同检查时间用药情况的大型数据集:Medication1与Dose1代表基线时的药物及剂量,Medication2与Dose2代表第二次检查时的情况,以此类推。需要找出两类患者:

  • 更换过药物的患者
  • 同一药物剂量发生变化的患者及对应药物
示例代码
# 修正后的示例数据(药物名称需用字符串格式)
ID= c(1,2,3)
Medication1= c("Ciprofloxacin", "Amoxicillin", "Penicillin")
Dose1= c(10, 10, 10)
Medication2= c("Ciprofloxacin", "Benzylpenicillin", "Penicillin")
Dose2= c(20, 10, 10)
Medication3= c("Ciprofloxacin", "Benzylpenicillin", "Penicillin")
Dose3= c(10, 15, 10)
ID_MED <- data.frame(ID, Medication1, Dose1, Medication2, Dose2, Medication3, Dose3)
预期结果
  • 药物更换的患者:仅2号
  • 同一药物剂量变化的患者及药物:1号(Ciprofloxacin)、2号(Benzylpenicillin)
解决方法

将宽格式数据转换为长格式后,分组统计即可实现需求,这里使用tidyverse工具包处理:

library(tidyverse)

# 把宽格式转为长格式,拆分时间维度
long_data <- ID_MED %>%
  pivot_longer(
    cols = -ID,
    names_to = c(".value", "time"),
    names_pattern = "(Medication|Dose)(\\d+)"
  ) %>%
  mutate(time = as.integer(time))

# 筛选更换药物的患者
drug_switch <- long_data %>%
  group_by(ID) %>%
  summarise(has_switch = n_distinct(Medication) > 1) %>%
  filter(has_switch) %>%
  pull(ID)

# 筛选同一药物剂量变化的患者及对应药物
dose_change <- long_data %>%
  group_by(ID, Medication) %>%
  summarise(has_dose_change = n_distinct(Dose) > 1) %>%
  filter(has_dose_change) %>%
  ungroup()

# 输出结果
cat("药物更换的患者:", paste(drug_switch, collapse = "、"), "\n")
cat("同一药物剂量变化的患者及药物:\n")
print(dose_change)

代码说明

  1. 转长格式:通过pivot_longer将每个时间点的药物、剂量拆分为单独行,让数据结构更适合时间序列分析。
  2. 药物更换判断:按患者ID分组,统计该患者使用过的药物种类数,若大于1则说明更换过药物。
  3. 剂量变化判断:按患者ID+药物分组,统计该药物的剂量种类数,若大于1则说明该药物剂量有变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:47:46