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

在长格式data.table中查找满足特定条件且无额外记录的ID的最快方法

解决方案:高效筛选符合条件的ID

需求回顾

你需要找出同时满足以下两个条件的ID:

  • 该ID对应的唯一一条记录必须是n = "1"且code = "ABC";
  • 该ID没有其他任何关联记录(即整个ID仅存在这一条数据)。

从你的示例数据来看,最终结果仅返回id = 2,这是唯一符合要求的ID。

最快实现方法(data.table版)

既然你用的是data.table,那直接利用它的原生分组特性就是最高效的方案——data.table的分组逻辑基于底层C实现,在大数据量下的性能远优于普通data.frame操作。核心思路是按id分组,在分组内同时完成行数判断和字段条件校验:

library(data.table)

# 你的原始数据
data <- data.table(id = c(1,1,2,3,3,4), n = c("1","2","1","1","2","1"), code = c("ABC", "ABC", "ABC", "ABC", "DEF", "GHI"))

# 核心筛选代码
target_ids <- data[, if (.N == 1 && n == "1" && code == "ABC") id, by = id]

# 查看结果
target_ids
# 输出:[1] 2

代码解释

  • .N是data.table的内置变量,用于快速获取当前分组内的行数,这个操作几乎没有额外开销;
  • 分组内的if判断会直接过滤掉不符合条件的组,只保留满足“仅一行数据+符合n/code规则”的ID;
  • 整个过程只需要一次分组遍历,不需要额外的合并或二次过滤,是性能最优的写法——数据量越大,这种方案的优势越明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:42:30