You need to enable JavaScript to run this app. R语言按分组规则删除数据框冗余SJ类型记录的实现问题
优惠活动
大模型
产品
解决方案
定价
更多

R语言按分组规则删除数据框冗余SJ类型记录的实现问题

R分组统计TYPE_COUNT为0的问题修复

为什么你的统计结果全是0

你写的统计代码sum(TYPE == "RF" & TYPE == "SJ")存在底层逻辑问题:
逐行判断时,单条记录的TYPE值只能是"RF"或"SJ"其中一个,不可能同时等于两个值,因此TYPE == "RF" & TYPE == "SJ"的判断结果全为FALSE,求和后自然所有行的TYPE_COUNT都是0,完全达不到统计组内两类记录存在情况的目的。

符合业务规则的正确实现

业务规则核心判断逻辑是:

  • 按CASE_ID、TIN、MPIN为维度分组
  • 若分组内同时存在RF、SJ两类记录,就移除该分组下的SJ行
  • 若分组内仅存在单类记录(只有RF、或只有SJ),则全部保留

可直接运行的代码

先准备示例数据:

example_df <- data.frame(
  CASE_ID = c(123,123,123),
  TIN = c("BOB","TIM","TIM"),
  MPIN = c("LONG","SHORT","SHORT"),
  TYPE = c('SJ','RF','SJ')
)

处理代码(需要依赖dplyr包,未安装可先执行install.packages("dplyr")):

library(dplyr)
output <- example_df %>%
  # 按指定维度分组
  group_by(CASE_ID, TIN, MPIN) %>%
  # 标记当前组是否同时存在RF、SJ两类记录
  mutate(has_both_type = all(c("RF", "SJ") %in% TYPE)) %>%
  # 过滤规则:删除「组内同时有两类记录」的分组下的SJ行,其余行全部保留
  filter(!(has_both_type == TRUE & TYPE == "SJ")) %>%
  # 解除分组,恢复常规数据框结构
  ungroup()

运行后得到的结果和预期输出完全一致:

> output
  CASE_ID  TIN  MPIN TYPE
1     123  BOB  LONG   SJ
2     123  TIM SHORT   RF

简化写法

如果不需要保留辅助统计列,可将判断逻辑直接写入filter环节,减少冗余列:

output <- example_df %>%
  group_by(CASE_ID, TIN, MPIN) %>%
  filter(!(all(c("RF", "SJ") %in% TYPE) & TYPE == "SJ")) %>%
  ungroup()

小提示:如果后续遇到组内同TYPE重复多条的极端情况,只要规则是同时存在两类记录就剔掉所有SJ行,上述逻辑依然适用,不需要额外修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 21:06:03