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

如何在R的data.table中筛选全指定月份Tier为Reg的ID?

解决data.table筛选全月份符合条件ID的问题

你的原代码逻辑存在偏差:它仅提取了存在1-3月中Tier为Reg的ID,但C在1、3月是Reg,因此被错误包含。你需要的是所有指定月份(1、2、3月)里Tier均为Reg的ID,以下是两种可行方案:

方案一:分组校验全量符合条件

借助data.table的分组功能,按ID分组后校验该ID在指定月份内的Tier是否全部为Reg:

# 简洁写法
DT[Month %in% c(1,2,3)][, if (all(Tier == 'Reg')) ID, by = ID][, unique(ID)]

分步拆解更清晰:

  1. 先筛选出指定月份的数据:
filtered_dt <- DT[Month %in% c(1,2,3)]
  1. 按ID分组,检查每个ID的Tier是否全为Reg:
check_result <- filtered_dt[, .(all_reg = all(Tier == 'Reg')), by = ID]
  1. 提取符合条件的ID:
valid_ids <- check_result[all_reg == TRUE, ID]

方案二:排除不符合条件的ID

先找出存在指定月份里Tier不为Reg的ID,再从原数据中排除这些ID:

# 找出有违规记录的ID
invalid_ids <- DT[Month %in% c(1,2,3) & Tier != 'Reg', unique(ID)]
# 排除违规ID,提取有效ID
valid_ids <- DT[!ID %in% invalid_ids, unique(ID)]

两种方案运行后都会返回A和B,符合预期需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:50:34