如何在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
相关产品推荐
相关产品推荐

