GEO生信数据挖掘(三)芯片探针ID与基因名映射处理

检索到目标数据集后,开始数据挖掘,本文以阿尔兹海默症数据集GSE1297为例

目录

处理一个探针对应多个基因

1.删除该行

2.保留分割符号前面的第一个基因

处理多个探针对应一个基因

详细代码案例一删除法

[详细代码案例二 多个基因名时保留第一个基因名](#详细代码案例二 多个基因名时保留第一个基因名)

小结

更新版本的代码全文


上节我们下载了基因芯片平台文件并注释,我们发现存在一个芯片探针ID匹配到多个基因的情况,本节来介绍处理方案。

处理一个探针对应多个基因

我们通过简单检索发现两种方法:1.删除操作 2.保留分割符号前面的第一个基因

1.删除该行

复制代码
#处理一个探针对应多个基因
#方案一:【删除该行】

explan_final <- data.frame(explan_final[-grep("///",explan_final$"Gene.Symbol"),]) 

#去一对多,grep是包含的意思,-就是不包含

2.保留分割符号前面的第一个基因

复制代码
#方案二:【保留第一个基因名】
ids = platform_file_set #探针列名和基因名两列
library(tidyverse)
test_function <- apply(ids,
               1,
               function(x){
                 paste(x[1],
                       str_split(x[2],'///',simplify=T),
                       sep = "...")
               })
x = tibble(unlist(test_function))

colnames(x) <- "ttt" 
ids <- separate(x,ttt,c("ID","Gene.Symbol"),sep = "\\...")
dim(ids) #探针列名和基因名两列

显然,第一个发现非常简单,在使用merge函数匹配时,会剔除更多的基因。第二个方法,会保留更多基因。

处理多个探针对应一个基因

表达矩阵中还有一个问题,如下图所示,很多探针指向同一个基因。

#把重复的Symbol 取每个基因所有探针的平均值或最大值作为基因的表达量

matrix <- aggregate(.~Gene.Symbol, matrix, mean) ##把重复的Symbol取平均值

matrix <- aggregate(.~Gene.Symbol, matrix, max) ##把重复的Symbol取最大值

详细代码案例一删除法

复制代码
# 安装并加载GEOquery包
library(GEOquery)

# 指定GEO数据集的ID
gse_id <- "GSE1297"

# 使用getGEO函数获取数据集的基础信息
gse_info <- getGEO(gse_id, destdir = ".", AnnotGPL = F ,getGPL = F) # Failed to download ./GPL96.soft.gz!

# 提取基因表达矩阵
expression_data <- exprs(gse_info[[1]])


#查看平台文件列名
colnames(annotation)


#打印项目文件列表
dir() 

# 读取芯片平台文件txt
platform_file <- read.delim("GPL96-57554.txt", header = TRUE, sep = "\t", comment.char = "#")

#查看平台文件列名
colnames(platform_file)

# 假设芯片平台文件中有两列,一列是探针ID,一列是基因名
#probe_names <- platform_file$ID
#gene_symbols <- platform_file$Gene.Symbol
platform_file_set=platform_file[,c(1,11)]

#将Matrix格式表达矩阵转换为data.frame格式
exprSet <- data.frame(expression_data)


#给表达矩阵新增加一列ID
exprSet$ID <- rownames(exprSet) # 得到表达矩阵,行名为ID,需要转换,新增一列

#矩阵表达文件和平台文件有相同列'ID',使用merge函数合并
express <- merge(x = exprSet, y = platform_file_set, by.x = "ID")

#删除探针ID列
express$ID =NULL

dim(express) 

exprSet = express
#查看多少个基因重复了
table(duplicated(exprSet$Gene.Symbol))


#处理重复基因,计算行平均值方案1
#rowMeans = apply(exprSet[,c(1:12)],1,function(x) mean(as.numeric(x), na.rm = T))####计算行平均值

#处理重复基因,计算行平均值方案2
#matrix <- aggregate(.~Gene.Symbol, matrix, mean)  ##把重复的Symbol取平均值
#row.names(matrix) <- matrix$Gene.Symbol  #把行名命名为SYMBOL

#处理重复基因,计算行平均值方案3
library(limma) #avereps 函数
exp_unique<-avereps(exp_symbol[,-c(32,ncol(exp_symbol))],ID=exp_symbol$Gene.Symbol)##把重复的Symbol取平均值

#排序
exprSet = exprSet[order(rowMeans, decreasing = T),] 
dim(exprSet)

#去掉重复基因
exprSet_2 = exprSet[!duplicated(exprSet[, dim(exprSet)[2]]),] 
dim(exprSet_2)

#去掉缺失值
exprSet_na = na.omit(exprSet_2)   
explan_final = exprSet_na[exprSet_na$Gene.Symbol != "",]
dim(explan_final)


#处理一个探针对应多个基因[删除法]
explan_final <- data.frame(explan_final[-grep("///",explan_final$"Gene.Symbol"),]) #去一对多,grep是包含的意思,-就是不包含
dim(explan_final)

rownames(explan_final) <- explan_final$Gene.Symbol
dim(explan_final)
explan_final <- explan_final[,c(1:31)]
# 此时explan_final为所需文件,行为基因,列为样本

> dim(explan_final)

1\] 12548 31 ### 详细代码案例二 多个基因名时保留第一个基因名 # 安装并加载GEOquery包 library(GEOquery) # 指定GEO数据集的ID gse_id <- "GSE1297" # 使用getGEO函数获取数据集的基础信息 gse_info <- getGEO(gse_id, destdir = ".", AnnotGPL = F ,getGPL = F) # Failed to download ./GPL96.soft.gz! # 提取基因表达矩阵 expression_data <- exprs(gse_info[[1]]) # 提取注释信息 annotation <- featureData(gse_info[[1]]) #查看平台文件列名 colnames(annotation) #打印项目文件列表 dir() # 读取芯片平台文件txt platform_file <- read.delim("GPL96-57554.txt", header = TRUE, sep = "\t", comment.char = "#") #查看平台文件列名 colnames(platform_file) # 假设芯片平台文件中有两列,一列是探针ID,一列是基因名 #probe_names <- platform_file$ID #gene_symbols <- platform_file$Gene.Symbol platform_file_set=platform_file[,c(1,11)] #一个探针对应多个基因名,保留第一个基因名 ids = platform_file_set library(tidyverse) test_function <- apply(ids, 1, function(x){ paste(x[1], str_split(x[2],'///',simplify=T), sep = "...") }) x = tibble(unlist(test_function)) colnames(x) <- "ttt" ids <- separate(x,ttt,c("ID","Gene.Symbol"),sep = "\\...") dim(ids) #将Matrix格式表达矩阵转换为data.frame格式 exprSet <- data.frame(expression_data) dim(exprSet) #给表达矩阵新增加一列ID exprSet$ID <- rownames(exprSet) # 得到表达矩阵,行名为ID,需要转换,新增一列 dim(exprSet) #矩阵表达文件和平台文件有相同列'ID',使用merge函数合并 express <- merge(x = exprSet, y = ids, by.x = "ID") #删除探针ID列 express$ID =NULL dim(express) matrix = express dim(matrix) #查看多少个基因重复了 table(duplicated(matrix$Gene.Symbol)) #把重复的Symbol取平均值 matrix <- aggregate(.~Gene.Symbol, matrix, mean) ##把重复的Symbol取平均值 row.names(matrix) <- matrix$Gene.Symbol #把行名命名为SYMBOL dim(matrix) matrix_na = na.omit(matrix) #去掉缺失值 dim(matrix_na) matrix_final = matrix_na[matrix_na$Gene.Symbol != "",] dim(matrix_final) matrix_final <- subset(matrix_final, select = -1) #删除Symbol列(一般是第一列) dim(matrix_final) \> dim(matrix_final) \[1\] 14826 31 ### 小结 原始数据记录有22283条,多个探针对应一个基因采用取平均值处理,一个探针对应多个基因分别进行直接删除操作和保留第一个基因操作, 两种方法最终获得的数据记录分别为12548,14826。 ### 更新版本的代码全文 # 安装并加载GEOquery包 library(GEOquery) # 指定GEO数据集的ID gse_id <- "GSE1297" # 使用getGEO函数获取数据集的基础信息 gse_info <- getGEO(gse_id, destdir = ".", AnnotGPL = F ,getGPL = F) # Failed to download ./GPL96.soft.gz! # 提取基因表达矩阵 expression_data <- exprs(gse_info[[1]]) # 提取注释信息 annotation <- featureData(gse_info[[1]]) #查看平台文件列名 colnames(annotation) #打印项目文件列表 dir() # 读取芯片平台文件txt platform_file <- read.delim("GPL96-57554.txt", header = TRUE, sep = "\t", comment.char = "#") #查看平台文件列名 colnames(platform_file) # 假设芯片平台文件中有两列,一列是探针ID,一列是基因名 #probe_names <- platform_file$ID #gene_symbols <- platform_file$Gene.Symbol platform_file_set=platform_file[,c(1,11)] #一个探针对应多个基因名,保留第一个基因名 ids = platform_file_set library(tidyverse) test_function <- apply(ids, 1, function(x){ paste(x[1], str_split(x[2],'///',simplify=T), sep = "...") }) x = tibble(unlist(test_function)) colnames(x) <- "ttt" ids <- separate(x,ttt,c("ID","Gene.Symbol"),sep = "\\...") dim(ids) #将Matrix格式表达矩阵转换为data.frame格式 exprSet <- data.frame(expression_data) dim(exprSet) #给表达矩阵新增加一列ID exprSet$ID <- rownames(exprSet) # 得到表达矩阵,行名为ID,需要转换,新增一列 dim(exprSet) #矩阵表达文件和平台文件有相同列'ID',使用merge函数合并 express <- merge(x = exprSet, y = ids, by.x = "ID") #删除探针ID列 express$ID =NULL dim(express) matrix = express dim(matrix) #查看多少个基因重复了 table(duplicated(matrix$Gene.Symbol)) #把重复的Symbol取平均值 matrix <- aggregate(.~Gene.Symbol, matrix, mean) ##把重复的Symbol取平均值 row.names(matrix) <- matrix$Gene.Symbol #把行名命名为SYMBOL dim(matrix) matrix_na = na.omit(matrix) #去掉缺失值 dim(matrix_na) matrix_final = matrix_na[matrix_na$Gene.Symbol != "",] dim(matrix_final) matrix_final <- subset(matrix_final, select = -1) #删除Symbol列(一般是第一列) dim(matrix_final) #+ 经过注释、探针名基因名处理、删除基因名为空值、删除缺失值 得到最终 matrix_final #+================================================================================== #+======================================================================================== 已经完成了部分的预处理工作了,在使用数据前还有一系列的质控要做,[请看下节数据清洗](http://t.csdn.cn/7hBqu "请看下节数据清洗")。

相关推荐
BYSJMG1 天前
计算机毕业设计选题推荐:基于大数据的肥胖风险分析与可视化系统详解
大数据·vue.js·数据挖掘·数据分析·课程设计
2501_941837261 天前
蘑菇可食用性分类识别_YOLO11分割模型实现与优化_1
人工智能·数据挖掘
木非哲1 天前
AB实验高级必修课(二):从宏观叙事到微观侦查,透视方差分析与回归的本质
人工智能·数据挖掘·回归·abtest
2501_941652771 天前
基于DETR模型的棉花品种识别与分类检测研究_r50_8xb2-150e_coco数据集训练
人工智能·数据挖掘
muddjsv1 天前
2026 数据分析主流语言全景解析:选型、场景与学习路径
数据挖掘·数据分析
2501_941652771 天前
验证码识别与分类任务_gfl_x101-32x4d_fpn_ms-2x_coco模型训练与优化
人工智能·数据挖掘
YangYang9YangYan1 天前
2026大专财务专业学生学数据分析的技术价值分析
数据挖掘·数据分析
Dingdangcat861 天前
轮胎缺陷检测与分类系统基于solov2_r101_fpn_ms-3x_coco模型实现_fulltyre专项识别_1
人工智能·分类·数据挖掘
实时数据1 天前
Selenium常用于网页爬取 为了提高爬取效率,可以采取以下优化措施:合理使用无头模式
selenium·测试工具·数据挖掘
CDA数据分析师干货分享1 天前
【干货】CDA一级知识点拆解3:《CDA一级商业数据分析》第3章 商业数据分析框架
大数据·人工智能·数据挖掘·数据分析·cda证书·cda数据分析师