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

如何在R或Shell中查找冒号分隔的镜像(反向重复)行?

R 实现方法

方法1:Base R 原生函数

拆分字符串生成标准化匹配键,筛选重复键对应的行号:

# 拆分字符串为左右两部分
split_cols <- strsplit(df$unique, ":")
# 生成标准化键:将拆分后的两部分排序后重新拼接
standard_keys <- sapply(split_cols, function(x) paste(sort(x), collapse = ":"))
# 找出出现次数≥2的键
duplicate_keys <- names(which(table(standard_keys) >= 2))
# 获取对应的行号
target_rows <- which(standard_keys %in% duplicate_keys)
target_rows
# 输出结果:2 4

方法2:tidyverse 工具链

用separate拆分列,生成标准化键后筛选目标行号:

library(tidyverse)

df %>%
  mutate(row_num = row_number()) %>%
  separate(unique, into = c("left", "right"), sep = ":") %>%
  mutate(standard_key = paste(pmin(left, right), pmax(left, right), sep = ":")) %>%
  group_by(standard_key) %>%
  filter(n() >= 2) %>%
  pull(row_num)
# 输出结果:2 4
Shell 实现方法

假设数据已保存为data.txt(每行对应df的unique列内容),用awk命令处理:

# 生成带行号的标准化键,统计重复键并提取对应行号
awk -F: '{key = ($1 < $2) ? $1":"$2 : $2":"$1; print key, NR}' data.txt | \
  awk '{count[$1]++; line[$1] = line[$1] " " $2} END {for(k in count) if(count[k]>=2) print line[k]}'

执行后输出2 4,即目标行号。

若需从R导出数据到文件,可先执行:

writeLines(df$unique, "data.txt")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:40:13