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

是否有R函数判断组值完全相同?及分组报错处理

如何用R识别具有完全相同B值集合的A组并统一分组ID

你需要实现的是:识别出所有B值集合完全相同的A组,并为它们分配同一个Group ID,而非按单个B值分组。

现有数据

AB
1a
2c
2e
3f
4h
5c
5e

期望结果

ABGroup
1a1
2c2
2e2
3f3
4h4
5c2
5e2

尝试的代码

library(readxl)
library(dplyr)
library(stringr)
data1 <- read_excel("testing.xlsx")
data2 <- data1 %>% 
  group_by(A) %>% 
  group_by(B) %>% 
  mutate(Group = cur_group_id()) %>% 
  ungroup()

运行结果

ABGroup
1a1
2c2
2e3
3f4
4h5
5c2
5e3

补充问题

尝试评论中的方法时出现报错:Can’t supply ‘.by’ when ‘.data’ is a grouped data frame.,原始数据经过left-join后已被分组,该如何处理?


解决方案

核心思路

先按A分组,将每个A对应的所有B值整理成标准化标识(如排序后拼接成字符串),再根据这个标识分配统一的Group ID。

代码实现

处理未分组数据

library(dplyr)

data_result <- data1 %>%
  # 按A分组,将B值排序后拼接为统一标识
  group_by(A) %>%
  mutate(group_key = paste(sort(B), collapse = ",")) %>%
  ungroup() %>%
  # 根据标识分配连续的Group ID
  mutate(Group = as.integer(factor(group_key, levels = unique(group_key)))) %>%
  # 移除临时标识列(可选)
  select(-group_key)

处理已分组数据(解决报错)

若数据已处于分组状态,需先取消分组再执行逻辑:

# 假设data_grouped是left-join后的分组数据
data_result <- data_grouped %>%
  # 先取消所有分组
  ungroup() %>%
  group_by(A) %>%
  mutate(group_key = paste(sort(B), collapse = ",")) %>%
  ungroup() %>%
  mutate(Group = as.integer(factor(group_key, levels = unique(group_key)))) %>%
  select(-group_key)

代码解释

  1. group_by(A):按A列分组,处理每个A对应的B值集合
  2. paste(sort(B), collapse = ","):将B值排序后拼接成字符串,确保集合相同的A组得到一致标识(如A=2和A=5的B值排序后均为"c,e")
  3. factor(group_key) + as.integer():将标识转换为连续的Group ID
  4. ungroup():针对已分组数据,必须先取消分组才能执行后续逻辑,解决Can’t supply ‘.by’ when ‘.data’ is a grouped data frame报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:11:14