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

如何用dplyr按值筛选反向配对数据,保留唯一实例?

问题需求

需要处理一组包含双向配对的数据(例如A01-B01和B01-A01视为同一配对),按以下规则保留每个配对的唯一实例:

  • 优先保留C列数值更高的行;
  • 若C列数值相同,则保留A列字母顺序更靠前的行。

示例数据

A = c("A01", "A01", "B01", "B02", "C03", "B01")
B = c("A02", "B01", "C03", "C03", "B01", "A01")
C = c(3, 4, 5, 2, 5, 3)
df <- tibble(A,B,C)

dplyr解决方案

核心思路是先为每个双向配对生成统一标识,再按规则筛选唯一实例:

library(dplyr)
library(tibble)

df %>%
  # 生成配对统一标识:将A、B按字母排序后合并,让A01-B01和B01-A01对应同一个key
  mutate(pair_key = pmap_chr(list(A, B), ~paste(sort(c(..1, ..2)), collapse = "-"))) %>%
  # 按配对分组,先按C降序排序,再按A升序排序,取每组第一行
  group_by(pair_key) %>%
  arrange(desc(C), A) %>%
  slice(1) %>%
  # 移除临时生成的配对标识列
  ungroup() %>%
  select(-pair_key)

输出结果

运行代码后得到符合要求的数据集:

# A tibble: 4 × 3
  A     B         C
  <chr> <chr> <dbl>
1 A01   A02       3
2 A01   B01       4
3 B01   C03       5
4 B02   C03       2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:39:56