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

如何用tidyverse方法识别数据框中的配对行并添加配对标识列

解决方案:用tidyverse生成配对唯一标识列

原始数据如下:

df <- data.frame(
  id = c(letters[1:4], LETTERS[5:8]),
  group = c(rep("same", 4), rep("opp", 4)),            
  match = c("H", "G", "E", "F", "c", "d", "b", "a")
)

要为每个双向配对分配连续唯一的数字标识,可通过以下tidyverse步骤实现:

  1. 生成配对的唯一键:将每行的id和match按字母顺序排序后拼接,确保配对的两行得到相同的键;
  2. 基于这个键生成连续的数字标识。

代码实现

library(tidyverse)

df_result <- df %>%
  # 生成配对的唯一键,确保双向配对的键一致
  mutate(pair_key = pmap_chr(list(id, match), ~str_c(sort(c(..1, ..2)), collapse = "-"))) %>%
  # 为每个配对分配从1开始的连续数字
  group_by(pair_key) %>%
  mutate(pair = cur_group_id()) %>%
  ungroup() %>%
  # 调整列顺序至目标格式
  select(pair, id, group, match)

# 输出结果
print(df_result)

运行后得到的结果与目标完全一致:

pair id group match
1    1  a  same     H
2    2  b  same     G
3    3  c  same     E
4    4  d  same     F
5    3  E   opp     c
6    4  F   opp     d
7    2  G   opp     b
8    1  H   opp     a

说明

  • pmap_chr逐行处理id和match,排序后拼接成唯一键,避免因配对方向不同导致键值不一致;
  • cur_group_id()自动为每个分组(即每个配对)分配连续的数字标识;
  • 最后通过select调整列顺序,匹配目标数据框的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:10:14