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

R语言按id分组标记多form来源并按高频form去重方法

R实现数据标记与去重方案

直接用dplyr包即可完成两步操作,逻辑清晰易维护,具体实现如下:

前置准备

先加载依赖包,未安装的话可先运行install.packages("dplyr")完成安装:

library(dplyr)

第一步:添加type标记列生成df.1

核心判断逻辑:按id分组后,只要存在任意一个key对应多个不同form值,该id下所有行标记为multiple,否则标记为single。

df.1 <- df %>%
  # 按id+key分组,检查每个key下是否存在多form冲突
  group_by(id, key) %>%
  mutate(key_has_conflict = n_distinct(form) > 1) %>%
  # 回到id分组维度,判断当前id是否存在任意冲突
  group_by(id) %>%
  mutate(type = ifelse(any(key_has_conflict), "multiple", "single")) %>%
  ungroup() %>%
  # 删除中间辅助列
  select(-key_has_conflict)

运行后输出的df.1和给出的期望结果完全一致。

第二步:筛选主导form去重生成df.2

核心规则:按id分组,先统计每个form的出现频次,保留频次最高的dominant form对应的行,再对同id下重复key去重即可。

df.2 <- df.1 %>%
  # 按id+form分组,统计每个form在对应id下的条目数
  group_by(id, form) %>%
  mutate(form_freq = n()) %>%
  # 回到id分组维度,只保留频次最高的form对应的行
  group_by(id) %>%
  filter(form == form[which.max(form_freq)]) %>%
  # 同id同key只保留唯一行
  distinct(id, key, .keep_all = TRUE) %>%
  ungroup() %>%
  # 删除中间辅助列
  select(-form_freq)

边界情况说明:如果遇到同一id下多个form出现频次完全相等的场景,可以在which.max前补充自定义优先级规则,比如优先保留字母序靠前的form,避免筛选结果随机。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:03:24