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

R data.table如何删除列值互为镜像的重复行

R data.table 筛选删除镜像重复行方案

核心思路

对每行的对称列生成标准化的唯一标识,让互为镜像的行生成的标识完全相同,再基于标识去重即可。

实现代码

library(data.table)

# 示例数据
dt = data.table(A=c(1, 5, 9, 3, 7, 11), B=c(2, 6, 10, 4, 8, 12), 
                C=c(3, 7, 11, 1, 5, 9), D=c(4, 8, 12, 2, 6, 10),
                E=c(47, 21, 45, 27, 40, 33), F=c(27, 40, 33, 47, 21, 45))

# 生成标准化键,镜像行的键值完全一致
dt[, unique_key := paste(
  pmin(A,C), pmin(B,D), 
  pmax(A,C), pmax(B,D), 
  pmin(E,F), pmax(E,F), 
  sep = "_"
)]

# 保留每组镜像行的第一行
dt_unique <- dt[!duplicated(unique_key), !"unique_key"]

# 如果要保留每组镜像行的最后一行,替换为以下代码
# dt_unique <- dt[!duplicated(unique_key, fromLast = TRUE), !"unique_key"]

输出结果

print(dt_unique)
#     A  B  C  D  E  F
# 1:  1  2  3  4 47 27
# 2:  5  6  7  8 21 40
# 3:  9 10 11 12 45 33

说明

该方案使用全向量化操作,无逐行循环,性能很高,适合处理百万级以上的大表。如果对称列规则有调整,只需要修改unique_key的生成逻辑即可,比如增加更多对称列的pmin/pmax配对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:27:03