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

在R中筛选检测结果跨度≥3年个体的DataFrame处理方法

血液检测数据筛选问题

血液检测数据集

id result date    
        A1 80     01/01/2006
        A1 70     02/10/2006
        A1 61     01/01/2007
        A1 30     01/01/2008
        A1 28     03/06/2008
        B2 40     01/01/2006
        B2 30     01/10/2006
        B2 25     01/01/2015
        B2 10     01/01/2020
        G3 28     01/01/2009
        G3 27     01/01/2014
        G3 25     01/01/2013
        G3 24     01/01/2011
        G3 22     01/01/2019
        U7 20     01/01/2005
        U7 19     01/01/2006
        U7 18     01/04/2006
        U7 18     01/08/2006

需求

仅保留血液检测结果时间跨度至少为3年的个体。

已有代码(日期转年份)

df %>% 
  # 为每个ID创建年份列
  mutate(date = dmy(date)) %>% 
  mutate(year = year(date)) %>% 
  # 按ID分组
  group_by(ID, year) %>% 
  # 计算最大差值
  summarise(max_diff = max(year) - min(year))

问题

如何继续使用管道操作移除max_diff <3的个体?

期望输出

id result date    
    B2 40     2006
    B2 30     2006
    B2 25     2015
    B2 10     2020
    G3 28     2009
    G3 27     2014
    G3 25     2013
    G3 24     2011
    G3 22     2019

解决方案

你之前的代码存在分组错误:同时按ID和year分组会导致每个分组内的年份相同,计算出的max_diff始终为0,无法正确统计个体的时间跨度。修正后的管道操作如下:

方法一:直接在原数据中计算并筛选

library(dplyr)
library(lubridate)

df %>%
  # 转换日期格式并提取年份
  mutate(date = dmy(date), year = year(date)) %>%
  # 仅按ID分组,计算该个体的检测时间跨度
  group_by(id) %>%
  mutate(time_span = max(year) - min(year)) %>%
  # 筛选时间跨度≥3年的记录
  filter(time_span >= 3) %>%
  # 可选:移除临时计算的time_span列
  select(-time_span)

方法二:先筛选有效ID再过滤数据

如果需要保留中间的有效ID列表,也可以用这种方式:

# 先获取符合时间跨度要求的ID列表
valid_ids <- df %>%
  mutate(date = dmy(date), year = year(date)) %>%
  group_by(id) %>%
  summarise(time_span = max(year) - min(year)) %>%
  filter(time_span >= 3) %>%
  pull(id)

# 用有效ID过滤原数据
df %>%
  mutate(date = dmy(date), year = year(date)) %>%
  filter(id %in% valid_ids)

两种方法都能得到你想要的输出结果,筛选出B2和G3这两个时间跨度满足要求的个体数据。

后续计划

将筛选后的个体数据用于时间预测相关分析。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:15:34