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

R语言中如何比较两个质谱数据矩阵的数值

质谱矩阵比对筛选解决方案

核心逻辑

  • 取两个矩阵第一列登录号的交集,仅保留同时出现在两个矩阵中的登录号
  • 对每个共有登录号,提取其在m1中对应的第二列数值,校验是否满足m1数值 * 2 > 2的条件
  • 将满足条件的登录号和目标数值(可自行选择取m1或m2的对应数值,以下示例默认取m2的数值)输出为新矩阵

R语言实现(生信分析场景常用)

# 1. 构造示例矩阵,实际使用时直接导入你的数据即可
m1 <- matrix(c("Q1", "Q2", 2, 1), ncol = 2, dimnames = list(NULL, c("登录号", "数值")))
m2 <- matrix(c("Q2", "P5", 3, 1), ncol = 2, dimnames = list(NULL, c("登录号", "数值")))

# 2. 转换为数据框并格式化数值列
m1_df <- as.data.frame(m1, stringsAsFactors = FALSE)
m1_df$数值 <- as.numeric(m1_df$数值)
m2_df <- as.data.frame(m2, stringsAsFactors = FALSE)
m2_df$数值 <- as.numeric(m2_df$数值)

# 3. 取共有登录号
common_ids <- intersect(m1_df$登录号, m2_df$登录号)

# 4. 筛选符合条件的条目
filtered_rows <- lapply(common_ids, function(id) {
  m1_val <- m1_df$数值[m1_df$登录号 == id]
  # 满足条件则返回对应行,需要取m1的数值就把下方m2_df替换为m1_df
  if (m1_val * 2 > 2) return(m2_df[m2_df$登录号 == id, ])
})

# 5. 转换为结果矩阵
result_matrix <- as.matrix(do.call(rbind, filtered_rows))

# 输出结果
print(result_matrix)

示例结果说明

你提供的示例中,两个矩阵的共有登录号只有Q2,其在m1的对应数值为1,计算得1*2=2不满足大于2的条件,所以示例运行后得到空矩阵。如果把m1中Q2的数值改为2,就会输出Q2和对应数值的结果。

Python实现

import pandas as pd

# 1. 构造示例数据,实际使用时直接读入你的csv/tsv文件即可
m1 = pd.DataFrame([["Q1", 2], ["Q2", 1]], columns=["登录号", "数值"])
m2 = pd.DataFrame([["Q2", 3], ["P5", 1]], columns=["登录号", "数值"])

# 2. 合并取共有登录号的行
merge_data = pd.merge(m1, m2, on="登录号", suffixes=("_m1", "_m2"))

# 3. 筛选符合条件的行,需要保留m1的数值就把下方数值_m2改为数值_m1
filter_data = merge_data[merge_data["数值_m1"] * 2 > 2][["登录号", "数值_m2"]]

# 4. 转换为矩阵格式
result_matrix = filter_data.values

# 输出结果
print(result_matrix)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:39:03