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

如何用R的dplyr筛选同时具备指定多组timepoint值的ID记录

R实现筛选同时包含指定多个时间点的ID的方法

你之前用%in%或者|运算符得到错误结果的核心原因是:这两个运算符都是对单行数据做判断,只能筛选出Timepoint为1/6/12的行,没法校验同一个ID是否同时覆盖了三个要求的时间点,所以会把只有1个或2个符合时间点的ID也保留下来。

你可以用以下两种常用方法实现需求:
首先构造和你示例一致的测试数据集:

df <- data.frame(
  ID = c(1,1,1,2,3,3,3,3,4,4,4),
  Timepoint = c(1,6,12,1,1,6,12,18,1,6,12)
)

方法1:基础R实现

核心思路是按ID分组,验证每个ID对应的所有时间点是否同时包含1、6、12三个值,筛选出符合要求的ID后再回表过滤:

# 筛选同时包含三个时间点的ID
target_ids <- as.numeric(names(which(tapply(df$Timepoint, df$ID, function(x) all(c(1,6,12) %in% x)))))
# 过滤得到对应ID的全量数据
result <- df[df$ID %in% target_ids, ]
# 如需仅输出符合条件的唯一ID,直接打印target_ids即可

方法2:dplyr(tidyverse系列)实现

写法更直观,适合日常数据处理场景:

library(dplyr)

# 过滤得到符合条件的ID的全量数据
result <- df %>%
  group_by(ID) %>%
  filter(all(c(1,6,12) %in% Timepoint)) %>%
  ungroup()

# 如需仅提取符合条件的唯一ID
unique_target_ids <- result %>% distinct(ID) %>% pull(ID)

两种方法得到的符合条件ID均为1、3、4,和预期结果一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:27:01