药物给药与数据处理:如何标记首次与末次给药
2026/4/26 4:10:22 网站建设 项目流程

在临床研究和药物动力学分析中,如何标记和处理药物给药的数据是非常关键的。今天我们将讨论如何利用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的给药周期起始和结束点,这对于后续的药物动力学分析和研究非常有用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询