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

如何识别R数据框中两列结构不同的标识符差异?

在R中识别两列结构不同的标识符差异

你的数据里两列的标识符格式不一致,需要先提取出核心的唯一ID,再对比差异,具体步骤如下:

1. 提取核心标识符

两列的格式分别是:

  • Description1:[核心ID]_FASHEprotein[数字]
  • Description2:tr|[核心ID]|[核心ID]_FASHEprotein[数字]

可以用基础R或stringr包提取核心ID:

基础R实现

# 假设数据框名为df
df$ID1 <- sub("_.*", "", df$Description1)  # 截取下划线前的内容
df$ID2 <- sub("tr\\|(.*)\\|.*", "\\1", df$Description2)  # 提取两个竖线之间的内容

stringr包实现(更直观)

library(stringr)
df$ID1 <- str_extract(df$Description1, "^[^_]+")  # 匹配开头到下划线前的所有字符
df$ID2 <- str_extract(df$Description2, "(?<=tr\\|)[^|]+")  # 匹配"tr|"之后到下一个竖线前的内容

2. 筛选差异行

提取完核心ID后,直接对比两列ID,筛选出不相等的行:

# 标记差异行
df$is_different <- df$ID1 != df$ID2

# 查看所有差异行
diff_result <- df[df$is_different, ]
print(diff_result)

完整示例代码

# 构造示例数据框
df <- data.frame(
  Description1 = c("A0A2H1CVW1_FASHEprotein1", "A0A4E0RAA2_FASHEprotein2", "A0A2H1CFJ4_FASHEprotein4"),
  Description2 = c("tr|A0A2H1CVW1|A0A2H1CVW1_FASHEprotein1", "tr|A0A2H1BSG1|A0A2H1BSG1_FASHEprotein3", "tr|A0A2H1CFJ4|A0A2H1CFJ4_FASHEprotein4"),
  stringsAsFactors = FALSE
)

# 提取核心ID(基础R方法)
df$ID1 <- sub("_.*", "", df$Description1)
df$ID2 <- sub("tr\\|(.*)\\|.*", "\\1", df$Description2)

# 标记并筛选差异行
df$is_different <- df$ID1 != df$ID2
diff_result <- df[df$is_different, ]

print(diff_result)

运行后会输出第2行的差异数据,明确展示两列标识符不一致的情况。

内容的提问来源于stack exchange,提问作者Marta López

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:00:02