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

如何在R语言中去除互为正反向的重复字符并获取唯一值?

解决方案

要处理这种正反向重复的字符串,核心思路是给每个字符串生成一个标准化的唯一标识——把字符串按下划线拆分后排序再拼接,这样a_b和b_a会生成相同的标识,接着基于这个标识筛选唯一的原字符串即可。

基础R实现

# 注意:避免用`list`作为变量名,它是R的内置函数
vec <- c('a_b', 'a_c', 'a_d', 'a_e', 'a_b', 'b_a', 'b_c', 'b_c','c_b')

# 定义标准化函数:拆分、排序、重新拼接
standardize_str <- function(s) {
  parts <- strsplit(s, "_")[[1]]
  paste(sort(parts), collapse = "_")
}

# 生成每个元素的标准化键
standard_keys <- sapply(vec, standardize_str)

# 保留每个唯一键对应的第一个原元素
unique_vec <- vec[!duplicated(standard_keys)]

# 查看结果
unique_vec

运行后输出:[1] "a_b" "a_c" "a_d" "a_e" "b_c",正好去除了b_a、c_b这类反向重复项,同时保留了原始的唯一正向形式。

Tidyverse风格实现(适合熟悉dplyr/tidyr的用户)

library(dplyr)
library(tidyr)

data.frame(original = vec) %>%
  # 拆分字符串为两部分
  separate(original, into = c("part1", "part2"), sep = "_") %>%
  # 生成排序后的标准化键(用pmin/pmax替代sort更高效)
  mutate(standard_key = paste(pmin(part1, part2), pmax(part1, part2), sep = "_")) %>%
  # 按键去重,保留原始字段
  distinct(standard_key, .keep_all = TRUE) %>%
  # 合并回原字符串格式
  unite(result, part1, part2, sep = "_") %>%
  # 提取结果向量
  pull(result)

这段代码逻辑和基础R版本一致,用tidyverse的链式语法更直观,输出结果相同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:40:59