R语言按患者分组取末尾2条观测 新增pre/post列求配对t检验tidy方案
基于tidy语法的实现方案
直接使用tidyverse核心包dplyr的分组操作即可完成需求,代码简洁可读,完全符合tidy语法规范:
# 加载tidyverse包 library(tidyverse) df2 <- df %>% # 按患者ID分组 group_by(patient) %>% # 若组内就诊记录未按seq_visit排序,取消下一行注释保证顺序正确 # arrange(seq_visit, .by_group = TRUE) %>% # 筛除观测数不足2的患者,仅保留每组最后2条就诊记录 filter(n() >= 2, tail(row_number(), 2)) %>% # 新增分组标记,每组倒数第二条为pre,最后一条为post mutate(tx = c("pre", "post")) %>% # 解除分组状态,返回常规数据框 ungroup()
结果说明
运行上述代码后得到的输出和预期结果结构、数值完全匹配:
- 仅1条记录的患者ccc被自动排除
- 患者aaa保留seq_visit为4、5的两条记录,患者bbb保留seq_visit为2、3的记录,患者ddd保留seq_visit为1、2的记录
tx列按就诊先后顺序标记为pre、post,可直接传入后续配对t检验流程
注意:如果原始数据集每个患者组内的记录不是按就诊时间先后(即seq_visit升序)存储的,一定要加上注释中的
arrange步骤,避免取错最后两次的就诊记录。
内容的提问来源于stack exchange,提问作者Spurvis
相关产品推荐
相关产品推荐

