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

如何基于每个ID的首尾OCC值生成OCC1标记列?

使用dplyr标记分组内首尾给药次数(OCC)

我们有一个纵向结构的DataFrame,每个ID对应多条观测数据,OCC列标记了给药次数。需要新增OCC1列,规则为:

  • 每个ID对应的首次OCC所有行标记为1
  • 每个ID对应的末次OCC所有行标记为2
  • 其余中间OCC的所有行标记为0

输入示例数据

ID TIME ADMIN CONC OCC 
1  0    10    0    1
1  1    0     1000 1
1  8    0     560  1
1  12   0     203  1
1  24   10    56   2
1  32   0     674  2
1  36   0     457  2
2  0    20    0    1
2  12   0     144  1
2  24   20    32   2
2  36   0     97   2
2  48   20    199  3
2  60   0     120  3 

期望输出数据

ID TIME ADMIN CONC OCC OCC1 
1  0    10    0    1   1
1  1    0     1000 1   1
1  8    0     560  1   1
1  12   0     203  1   1
1  24   10    56   2   2
1  32   0     674  2   2
1  36   0     457  2   2
2  0    20    0    1   1
2  12   0     144  1   1
2  24   20    32   2   0
2  36   0     97   2   0
2  48   20    199  3   2
2  60   0     120  3   2

解决方案

使用dplyr的分组功能结合多条件判断,一次性完成标记:

library(dplyr)

# 假设你的数据框名为df
df <- df %>%
  group_by(ID) %>%
  mutate(
    OCC1 = case_when(
      OCC == first(OCC) ~ 1,
      OCC == last(OCC) ~ 2,
      TRUE ~ 0
    )
  ) %>%
  ungroup() # 可选:取消分组,避免后续操作受分组影响

代码说明

  • group_by(ID):按ID分组,确保每个ID的标记逻辑独立执行
  • first(OCC)/last(OCC):分别提取当前分组中OCC的首次、末次取值
  • case_when():按顺序匹配条件,满足对应规则则赋值,最后用TRUE ~ 0覆盖所有中间OCC的情况

运行上述代码后,即可得到符合要求的OCC1列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:23:38