当前位置: 首页 > news >正文

药物给药与数据处理:如何标记首次与末次给药

在临床研究和药物动力学分析中,如何标记和处理药物给药的数据是非常关键的。今天我们将讨论如何利用R语言中的dplyr包来标记一个数据集中每个ID的首次和末次给药事件,并展示如何通过实际案例实现这一目标。

数据背景

假设我们有如下数据框,包含了多个ID的多次观察数据:

df <- data.frame( ID = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2), TIME = c(0, 1, 8, 12, 24, 32, 36, 0, 12, 24, 36, 48, 60), ADMIN = c(10, 0, 0, 0, 10, 0, 0, 20, 0, 20, 0, 20, 0), CONC = c(0, 1000, 560, 203, 56, 674, 457, 0, 144, 32, 97, 199, 120), OCC = c(1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 3, 3) )

需求分析

我们的目标是为每个ID标记其首次和末次给药事件。具体来说:

  • OCC1 = 1表示首次给药事件。
  • OCC1 = 2表示末次给药事件。
  • 所有中间的给药事件标记为0

解决方案

我们可以使用dplyr中的mutate()函数结合case_match()函数来实现这个目标。以下是具体的代码:

library(dplyr) df <- df %>% group_by(ID) %>% mutate( OCC1 = case_match( OCC == first(OCC) ~ 1, OCC == last(OCC) ~ 2, .default = 0 ) ) %>% ungroup() print(df)

代码解释

  1. 分组:首先,我们根据ID对数据进行分组,这样可以确保每个ID的首次和末次给药是独立计算的。
  2. mutate():使用mutate()来创建新的列OCC1
  3. case_match()
    • OCC == first(OCC) ~ 1:如果OCC等于该ID的第一个OCC值,则OCC1设为1。
    • OCC == last(OCC) ~ 2:如果OCC等于该ID的最后一个OCC值,则OCC1设为2。
    • .default = 0:如果以上条件都不满足,则OCC1设为0。

结果展示

运行上述代码后,我们得到的df如下:

# A tibble: 13 x 6 ID TIME ADMIN CONC OCC OCC1 <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 1 0 10 0 1 1 2 1 1 0 1000 1 1 3 1 8 0 560 1 1 4 1 12 0 203 1 1 5 1 24 10 56 2 2 6 1 32 0 674 2 2 7 1 36 0 457 2 2 8 2 0 20 0 1 1 9 2 12 0 144 1 1 10 2 24 20 32 2 0 11 2 36 0 97 2 0 12 2 48 20 199 3 2 13 2 60 0 120 3 2

通过上述步骤,我们成功地在每个ID的首次和末次给药事件上标记了OCC1值,其他给药事件则标记为0。这样,我们可以轻松地识别出每个ID的给药周期起始和结束点,这对于后续的药物动力学分析和研究非常有用。

http://www.jsqmd.com/news/701378/

相关文章:

  • ToolJet开源低代码平台:从架构原理到企业级应用实战
  • 为什么92%的量化研究员在VSCode里漏掉关键异常堆栈?——金融时间序列调试中的4层隐式上下文缺失分析
  • SQL性能优化实战:从慢查询到秒开(详细代码注释)
  • 基于安卓的社区法律服务咨询平台毕业设计
  • 类别不平衡问题:从准确率陷阱到工业解决方案
  • Stable Diffusion提示词优化7大进阶技巧
  • ai4j:面向JDK 8+的Java AI全栈开发套件,统一多模型API与Agent构建
  • 集成学习复杂度与奥卡姆剃刀的现代机器学习实践
  • Agenst框架解析:构建多AI智能体协同系统的核心原理与实践
  • 微博开源分布式工作流引擎 rill-flow 核心架构与生产实践详解
  • 基于安卓的社区闲置物品交换平台毕业设计源码
  • 决策树中序数编码的正确使用与实践
  • 轻量级跨平台GUI框架PUAX:从原理到实战的桌面应用开发指南
  • 802.11g与802.11a无线标准技术对比与演进分析
  • VSCode 2026嵌入式调试适配深度解析(2024Q4固件级兼容性白皮书首发)
  • Python字典怎么合并_update()方法与-运算符(Python3.9+)
  • Java开发者如何用LangChain4j构建RAG应用与智能体
  • 【仅剩最后200份】C++26反射面试压轴题库(含微软/字节/英伟达2024Q2真实考题+编译失败日志逐行溯源)
  • FLUX.1-Krea-Extracted-LoRA入门指南:Streamlit UI响应延迟高时的排查路径
  • AgentsMeetRL:强化学习训练LLM智能体的开源项目全景与实战指南
  • 2026年热门的一站式验厂咨询热选公司推荐 - 品牌宣传支持者
  • 机器学习数据准备:从问题框架到特征工程的实战指南
  • TrollInstallerX架构深度解析:iOS 14-16.6.1内核漏洞利用与持久化安装实现机制
  • 机器学习类别不平衡问题:欠采样方法详解与实践
  • Open-AutoGLM:基于视觉大模型的手机端智能体部署与开发实战
  • Java方法级性能监控利器MyPerf4J:低侵入、高精度的性能剖析实战
  • PHP作用域的庖丁解牛
  • 打卡信奥刷题(3166)用C++实现信奥题 P7865 「EVOI-RD1」无人机航拍
  • 2026Q2单相调压器技术解析:三相隔离变压器/交流稳压器/交流调压器/医用隔离变压器/医疗变压器/医疗设备UPS/选择指南 - 优质品牌商家
  • 海外玩家伪装来源? 怎么用IP归属地识别