如何用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步骤实现:
- 生成配对的唯一键:将每行的
id和match按字母顺序排序后拼接,确保配对的两行得到相同的键; - 基于这个键生成连续的数字标识。
代码实现
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
相关产品推荐
相关产品推荐

