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

R语言实现质谱数据mz值范围匹配与注释

质谱数据mz范围匹配注释解决方案

针对你需要在±0.001范围内匹配File1和File2的mz值并完成注释的需求,以下是几种实用的R实现方法:

1. 使用fuzzyjoin + dplyr(简洁易读)

fuzzyjoin包专门用于模糊匹配,结合dplyr的语法,代码直观易懂,适合常规数据规模:

# 安装并加载所需包
install.packages(c("fuzzyjoin", "dplyr"))
library(fuzzyjoin)
library(dplyr)

# 构造示例数据(替换为你的实际数据)
File1 <- data.frame(
  mz = c(100.1234, 134.5678, 150.1234, 176.5678),
  intensity = c(1234, 7653, 23463, 12354)
)

File2 <- data.frame(
  mz = c(100.1225, 112.5678, 150.1239, 176.5665),
  name = c("name1", "name2", "name3", "name4")
)

# 执行模糊左连接,匹配±0.001范围内的mz
result <- fuzzy_left_join(
  File1,
  File2,
  by = "mz",
  match_fun = function(x, y) abs(x - y) <= 0.001
) %>%
  # 保留目标列并去重(若有多个匹配,取第一个)
  select(mz = mz.x, intensity, name) %>%
  group_by(mz, intensity) %>%
  slice_head(n = 1) %>%
  ungroup()

# 将未匹配到的name设为空字符串
$result$name[is.na(result$name)] <- ""

print(result)

2. 使用data.table(高效处理大数据)

如果你的质谱数据量较大,data.table的非等连接性能更优,适合大规模数据处理:

# 安装并加载data.table
install.packages("data.table")
library(data.table)

# 转换为data.table格式
setDT(File1)
setDT(File2)

# 非等连接,指定mz的匹配范围
result_dt <- File2[File1, on = .(mz >= mz - 0.001, mz <= mz + 0.001), 
                   .(mz = i.mz, intensity, name = x.name)]

# 处理重复匹配,保留每组的第一个结果
result_dt <- result_dt[, .SD[1], by = .(mz, intensity)]

# 未匹配项设为空字符串
result_dt[is.na(name), name := ""]

print(result_dt)

3. 基础R循环(无需额外包,适合小数据集)

如果不想安装第三方包,基础R循环也能实现需求,适合小型数据集:

# 构造示例数据
File1 <- data.frame(
  mz = c(100.1234, 134.5678, 150.1234, 176.5678),
  intensity = c(1234, 7653, 23463, 12354)
)

File2 <- data.frame(
  mz = c(100.1225, 112.5678, 150.1239, 176.5665),
  name = c("name1", "name2", "name3", "name4")
)

# 初始化name列
File1$name <- ""

# 循环匹配每个mz值
for (i in seq(nrow(File1))) {
  target_mz <- File1$mz[i]
  # 找到符合范围的匹配项
  match_pos <- which(abs(File2$mz - target_mz) <= 0.001)
  if (length(match_pos) > 0) {
    File1$name[i] <- File2$name[match_pos[1]]
  }
}

print(File1)

注意事项

  • 如果File2中存在多个mz值落在同一File1 mz的±0.001范围内,上述代码默认取第一个匹配结果。你可以根据需求调整,比如合并所有匹配的name,或者添加筛选逻辑。
  • 确保两文件的mz列均为数值型,避免格式错误导致匹配失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:10:21