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

在R中基于多列筛选三个大型表格的共同变异

筛选三个表格共有的变异条目(基于CHR_POS、Allele1、Allele2)

以下提供两种常用工具的实现方案,均保留三个表格各自的原始结构,仅筛选出三表共有的目标条目:

方案一:使用R语言

假设三个表格文件名为table1.txt、table2.txt、table3.txt,均为空格分隔的文本格式:

# 1. 读取三个表格
table1 <- read.table("table1.txt", header = TRUE, stringsAsFactors = FALSE)
table2 <- read.table("table2.txt", header = TRUE, stringsAsFactors = FALSE)
table3 <- read.table("table3.txt", header = TRUE, stringsAsFactors = FALSE)

# 2. 为每个表格生成唯一标识(拼接CHR_POS、Allele1、Allele2)
table1$key <- paste(table1$CHR_POS, table1$Allele1, table1$Allele2, sep = "_")
table2$key <- paste(table2$CHR_POS, table2$Allele1, table2$Allele2, sep = "_")
table3$key <- paste(table3$CHR_POS, table3$Allele1, table3$Allele2, sep = "_")

# 3. 找出三个表格共有的key
common_keys <- intersect(intersect(table1$key, table2$key), table3$key)

# 4. 筛选每个表格的共有条目,并移除临时生成的key列
filtered_table1 <- table1[table1$key %in% common_keys, !names(table1) %in% "key"]
filtered_table2 <- table2[table2$key %in% common_keys, !names(table2) %in% "key"]
filtered_table3 <- table3[table3$key %in% common_keys, !names(table3) %in% "key"]

# 5. 输出筛选后的表格到文件
write.table(filtered_table1, "filtered_table1.txt", sep = " ", quote = FALSE, row.names = FALSE)
write.table(filtered_table2, "filtered_table2.txt", sep = " ", quote = FALSE, row.names = FALSE)
write.table(filtered_table3, "filtered_table3.txt", sep = " ", quote = FALSE, row.names = FALSE)

方案二:使用Python(Pandas库)

同样假设三个表格文件名为table1.txt、table2.txt、table3.txt:

import pandas as pd

# 1. 读取三个表格
df1 = pd.read_table("table1.txt", sep=" ")
df2 = pd.read_table("table2.txt", sep=" ")
df3 = pd.read_table("table3.txt", sep=" ")

# 2. 生成每个表格的唯一标识列
df1["key"] = df1["CHR_POS"] + "_" + df1["Allele1"] + "_" + df1["Allele2"]
df2["key"] = df2["CHR_POS"] + "_" + df2["Allele1"] + "_" + df2["Allele2"]
df3["key"] = df3["CHR_POS"] + "_" + df3["Allele1"] + "_" + df3["Allele2"]

# 3. 获取三表共有的key集合
common_keys = set(df1["key"]) & set(df2["key"]) & set(df3["key"])

# 4. 筛选每个表格的共有条目,并删除临时key列
filtered_df1 = df1[df1["key"].isin(common_keys)].drop("key", axis=1)
filtered_df2 = df2[df2["key"].isin(common_keys)].drop("key", axis=1)
filtered_df3 = df3[df3["key"].isin(common_keys)].drop("key", axis=1)

# 5. 保存筛选后的表格
filtered_df1.to_csv("filtered_table1.txt", sep=" ", index=False, quoting=3)
filtered_df2.to_csv("filtered_table2.txt", sep=" ", index=False, quoting=3)
filtered_df3.to_csv("filtered_table3.txt", sep=" ", index=False, quoting=3)

注意事项

  • 上述方案严格匹配Allele1和Allele2的顺序,若需要忽略等位基因顺序(如A/G与G/A视为同一变异),需先统一等位基因排序(例如将两个等位基因按字母顺序排序后再生成key)。
  • 若表格列名或分隔符与示例不同,需对应调整读取函数的参数(如sep、header等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:00:59