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

如何用R的tibble、group_by和slice复现SAS分组取首尾行逻辑

使用R实现SAS的连续治疗组首尾行提取逻辑

假设你的R数据框名为df,包含usubjid(患者ID)和trt(治疗组)等字段,可通过以下步骤实现目标:

  1. 生成连续治疗组的分组标识
    先为同一患者内的连续相同trt生成唯一分组ID,用dplyr原生方法即可实现:

    library(tibble)
    library(dplyr)
    
    df_processed <- df %>%
      as_tibble() %>%
      group_by(usubjid) %>%
      # 当当前行trt与上一行不同时,分组标识计数+1
      mutate(trt_group = cumsum(trt != lag(trt, default = first(trt)))) %>%
      ungroup()
    
  2. 按患者+连续治疗组分组,提取首尾行
    基于生成的分组标识,用slice提取每组的首行和末行:

    result <- df_processed %>%
      group_by(usubjid, trt_group) %>%
      slice(c(1, n())) %>%
      ungroup() %>%
      # 可选:移除临时分组标识列
      select(-trt_group)
    

补充说明

  • lag(trt, default = first(trt))用于匹配当前行的上一行trt值,第一行默认使用自身trt,确保第一个连续组的标识计数从0开始。
  • 若某连续治疗组仅含1行,slice(c(1, n()))会重复选中该行,如需去重可追加distinct()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:02:07