如何按样本名匹配logtpm2表达数据与注释表并添加指定列
解决方案
前置注意点
- 合并前需要先统一两张表的
sample_name格式:你提供的示例中,logtpm2里bulk开头的样本名用.分隔(比如bulk.DMSO.Pre.96IFC),注释表对应样本用-分隔(比如bulk.DMSO-Pre-96IFC),需要先把分隔符统一才能正常匹配 - 合并时选择左连接逻辑,完全保留logtpm2的所有行,最终输出行数和原logtpm2一致(1812364行)
R语言实现(dplyr包)
# 加载依赖包 library(dplyr) # 读取原始数据 logtpm2 <- read.table("logtpm2文件本地路径", header = T, stringsAsFactors = F) anno <- read.table("注释文件本地路径", header = T, stringsAsFactors = F) # 统一样本名字符格式:将注释表中的横杠替换为点 anno$sample_name <- gsub("-", ".", anno$sample_name) # 左连接合并,保留logtpm2全部行,筛选需要的列 result <- left_join(logtpm2, anno, by = "sample_name") %>% select(sample_name, Expression, Treatment, Technology) # 输出最终结果 write.table(result, "合并后结果保存路径", sep = "\t", row.names = F, quote = F)
Python实现(pandas库)
import pandas as pd # 读取原始数据 logtpm2 = pd.read_table("logtpm2文件本地路径") anno = pd.read_table("注释文件本地路径") # 统一样本名字符格式:将注释表中的横杠替换为点 anno["sample_name"] = anno["sample_name"].str.replace("-", ".") # 左连接合并,保留logtpm2全部行,筛选需要的列 result = pd.merge(logtpm2, anno, on="sample_name", how="left") result = result[["sample_name", "Expression", "Treatment", "Technology"]] # 输出最终结果 result.to_csv("合并后结果保存路径", sep="\t", index=False)
内容的提问来源于stack exchange,提问作者hollyjolly
相关产品推荐
相关产品推荐

