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

在R中用data.table实现类Excel COUNTIFS的高效数据校验

基于data.table的She-He映射标记方案

原始数据集

dt <- data.table(F = c(1, 2, 3, 4, 5, 6, 7, 7, 4, 6, 7, 5),
                 M = c("a", "b", "c", "b", "c", "a", "d", "d", "b", "b", "d", "c"));
colnames(dt)=c("She","He");

需求说明

  • 采用高效方法(优先data.table)适配超大数据集
  • 识别异常场景:She列的每个值应仅对应He列的唯一值,例如She=6同时对应He=a和He=b属于异常
  • 新增标记列:1标记异常场景中的对应行,0标记正常映射行(预期结果:c(0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0))
  • 不得修改原数据的排序或进行聚合操作

解决方案代码

library(data.table)

# 分步计算标记列,全程保留原数据顺序
dt[, count := .N, by = .(She, He)]
dt[, unique_he_count := uniqueN(He), by = She]
dt[, is_correct := ifelse(unique_he_count > 1 & count == 1, 1, 0)]

# 可选:删除中间计算列
dt[, c("count", "unique_he_count") := NULL]

代码说明

  1. by = .(She, He)分组计算每个She-He组合的出现次数,得到count列
  2. by = She分组计算每个She对应的不同He值数量,得到unique_he_count列
  3. 通过条件判断生成标记列:当She对应多个不同He,且当前行的He在该She组中仅出现一次时,标记为1,其余情况标记为0
  4. data.table的分组操作基于底层C实现,内存占用低、处理速度快,完全适配超大数据集,且全程不会改变原数据的行顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:05:57