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

如何在R语言中按Key分组生成排除当前行DataID的Duplicates列

解决方法:创建排除当前行的关联DataID列

首先,为保证结果可复现,先设置随机种子并生成示例数据:

set.seed(123)
df <- data.frame(Key = c(rep("A", 2), rep("B", 4), rep("C", 3), rep("D", 2)),
                 DataID = round(runif(11, min = 400, max = 500), digits = 0))

使用tidyverse工具可实现需求,核心思路是按Key分组后,从组内所有DataID中移除当前行的对应值,优化后的代码如下:

library(tidyverse)

df_updated <- df %>%
  group_by(Key) %>%
  mutate(
    # 为每个分组生成包含所有DataID的列表
    group_data = list(DataID),
    # 遍历每一行,从组内数据中排除当前行的DataID
    Duplicates = map2(group_data, DataID, ~ .x[.x != .y])
  ) %>%
  # 移除临时辅助列
  select(-group_data) %>%
  ungroup()

代码说明

  • group_by(Key):按Key分组,确保仅处理同一分组内的关联数据
  • group_data = list(DataID):为每个分组创建包含该组所有DataID的列表列,作为后续过滤的数据源
  • map2(group_data, DataID, ~ .x[.x != .y]):通过map2同时遍历分组数据列表和当前行的DataID,筛选出不等于当前行DataID的所有值,生成Duplicates列
  • select(-group_data):移除临时创建的辅助列,保持数据整洁
  • ungroup():取消分组,恢复数据框的普通结构

示例输出

运行代码后,df_updated的部分结果如下:

# A tibble: 11 × 3
   Key   DataID Duplicates
   <chr>  <dbl> <list>    
 1 A        428 <dbl [1]> 
 2 A        478 <dbl [1]> 
 3 B        440 <dbl [3]> 
 4 B        488 <dbl [3]> 
 5 B        494 <dbl [3]> 
 6 B        441 <dbl [3]> 
 7 C        438 <dbl [2]> 
 8 C        469 <dbl [2]> 
 9 C        445 <dbl [2]> 
10 D        470 <dbl [1]> 
11 D        442 <dbl [1]> 

展开列表列可见,每个Duplicates值都是当前Key分组中排除自身DataID后的所有关联值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:03:22