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

如何在R中筛选预处理组最接近0及后处理组最远的周期

解决R数据分组筛选问题

你的需求是按patient_id分组,筛选pre-treatment中最接近0的记录,以及post-treatment中离0最远的记录。你原代码的问题在于pre-treatment部分误用了min(period)——这会选中pre组里最负(离0最远)的记录,不符合要求,调整逻辑即可解决:

正确代码方案一(分组逻辑更直观)

library(dplyr)

df2 <- df %>%
  group_by(patient_id, TREAT_CAT) %>%
  filter(
    if_else(TREAT_CAT == "pre-treatment", 
            period == max(period),  # pre组取最大的period(最接近0)
            period == max(period)   # post组取最大的period(离0最远)
    )
  ) %>%
  ungroup()

正确代码方案二(单分组内筛选)

df2 <- df %>%
  group_by(patient_id) %>%
  filter(
    (TREAT_CAT == "pre-treatment" & period == max(period[TREAT_CAT == "pre-treatment"])) |
    (TREAT_CAT == "post-treatment" & period == max(period[TREAT_CAT == "post-treatment"]))
  ) %>%
  ungroup()

运行结果

执行后会得到你预期的输出:

patient_id period   TREAT_CAT      Outcome
       <dbl> <drtn>   <fct>          <chr>  
1          1 -3170 days pre-treatment Pink   
2          1  200 days post-treatment Pink   
3          2 -2900 days pre-treatment Blue   
4          2  100 days post-treatment Pink   

逻辑说明

  • pre-treatment组的period均为负数,max(period)就是数值最大、最接近0的那条(比如-3170比-3228更接近0)
  • post-treatment组的period为非负数,max(period)就是数值最大、离0最远的那条(比如200比100远,100比0远)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:15:13