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

R语言技术问题:按ID保留至test.result首次出现1的所有数据并过滤后续内容

解决方案:保留每个患者首次出现test.result=1前的所有数据

你的原有代码问题在于:filter(test.result == max(test.result))仅保留了每个分组中test.result等于最大值的行(即所有test.result=1的行),既丢失了之前的0值数据,也没过滤掉首次出现1之后的其他行。

以下是两种可行的修正方案:

方法1:用累计标记过滤

通过cumsum标记是否已出现过1,保留首次出现1及之前的所有行:

new.ddset <- ddset %>%
  group_by(id) %>%
  mutate(has_positive = cumsum(test.result == 1)) %>%
  filter(has_positive <= 1) %>%
  select(-has_positive) %>%
  ungroup()
  • cumsum(test.result == 1)会逐行累计当前分组中出现过的1的次数,未出现1时为0,首次出现1时变为1,之后的行累计值会≥2
  • filter(has_positive <= 1)保留所有未出现1的行(累计值0)和首次出现1的行(累计值1)

方法2:用行索引截取

直接定位首次出现1的行位置,截取到该位置的所有行(无1则保留全部):

new.ddset <- ddset %>%
  group_by(id) %>%
  slice(1:ifelse(any(test.result == 1), which(test.result == 1)[1], n())) %>%
  ungroup()
  • which(test.result == 1)[1]获取当前分组中首次出现1的行号
  • ifelse处理无1的情况:若分组中没有test.result=1的行,就保留从第1行到最后一行(n()为分组总行数)

两种方法都能实现你的需求:比如id1的screen.num1-5为0、screen.num6为1时,会保留1-6的所有数据,删除之后的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:37:42