R语言 GSE文件解析

# GSE_Expression_Matrix.R  
# 整理下载的数据
# 指针换基因名

工程文件目录:

项目文件目录:

rm(list = ls())
gc()
options(stringsAsFactors = F)
# 设置链接超时时间
options(timeout=200000)

# 设置R的使用内存
Sys.setenv("VROOM_CONNECTION_SIZE"=99999999)

## 加载自定义R包
source("./R_Function/R_Packages_Manage.R",encoding="utf-8")
rpackages <- c('GEOquery','tidyverse','magrittr','readxl','limma','dplyr','stringr','data.table','impute','org.Hs.eg.db','AnnotationDbi')
pkgs_in(rpackages)

inputPath <- "./0_GEO/2_GSE_Expression_Matrix/1_Input/"
outputPath <- "./0_GEO/2_GSE_Expression_Matrix/2_Output/"

# GSE_NO <- read.delim(paste0(inputPath, "GSE_NO.txt"), header = FALSE, stringsAsFactors = FALSE)
# GPL_NO <- read.delim(paste0(inputPath, "GPL_NO.txt"), header = FALSE, stringsAsFactors = FALSE)

# 使用 list.files 列出目录中的文件,并使用正则表达式进行匹配过滤
gse_files <- list.files(path = inputPath, pattern = "^GSE.*\\.gz$", full.names = FALSE)

gse_files <- as.data.frame(gse_files) %>% 
  mutate(across(everything(), ~ str_split_fixed(., "_", 2)[,1])) %>% 
  mutate(across(everything(), ~ str_split_fixed(., "-", 2)[,1])) %>% 
  set_colnames("GSE_NO") %>% unique()

results <- data.frame()
results[] <- list(NULL)


find_matching_columns <- function(df, pattern) {
  # 分割列名为单词列表
  column_words <- strsplit(names(df), "\\s+|_|-|\\.|,")
  
  # 定义一个向量来存储匹配的列名和它们的匹配分数
  matched_columns <- list()
  
  # 对每一列进行检查
  for (i in seq_along(column_words)) {
    
    if(length(column_words[[i]]) >2) next
    words <- column_words[[i]]
    match_count <- sum(grepl(pattern, words, ignore.case = TRUE))
    
    if (match_count > 0) {
      matched_columns[[names(df)[i]]] <- match_count
    }
  }
  # 按照匹配词的数量进行排序(降序)
  sorted_columns <- names(sort(unlist(matched_columns), decreasing = TRUE))
  return(sorted_columns)
}

for(GSE_NO1 in gse_files$GSE_NO){
  
  # GSE_NO1 <- "GSE3494"
  gset1 <- getGEO(GSE_NO1, destdir = paste0(inputPath),
                  # AnnotGPL = TRUE
                  getGPL = TRUE
  )
  
  num_subsets <- length(gset1) %>% as.integer()
  
  for(i in 1:num_subsets){
    tryCatch({
      ### group分组文件----
      dat_exp <- exprs(gset1[[i]])
      
      # data.table::fwrite(dat_exp, paste0(outputPath,GSE_NO1,"_series_matrix.csv"), row.names = T)
      # print(paste0("GSE文件:",out

在R语言解析GEO数据集(如GSE39582)通常涉及从NCBI GEO数据库下载数据文件并进行初步处理,以便后续分析。以下为详细的方法和步骤: ### 数据获取 首先需要访问NCBI GEO数据库获取GSE39582的数据文件。可以通过以下方式之一完成下载: 1. 在浏览器中输入 `https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE39582`,然后点击“Series Matrix File(s)”链接下载压缩的系列矩阵文件(`.txt.gz`格式)[^2]。 2. 使用R语言中的 `GEOquery` 包直接下载并解析数据。此方法更为便捷,适用于自动化流程。 ```r library(GEOquery) # 下载并解析GSE39582数据集 gse <- getGEO(filename = "GSE39582_series_matrix.txt.gz", destdir = ".", getGPL = FALSE) ``` ### 数据解析与预处理 下载完成后,需将原始数据转换为适合下游分析的格式。具体步骤如下: #### 1. 提取表达矩阵 使用 `exprs()` 函数提取表达矩阵: ```r expression_data <- exprs(gse) ``` 这一步骤将返回一个数值矩阵,其中行代表探针ID,列代表样本。 #### 2. 获取样本信息 通过 `pData()` 函数可以查看样本的元数据信息,例如实验条件、组织类型等: ```r sample_info <- pData(gse) ``` 这些信息对于后续分组分析至关重要。 #### 3. 注释探针ID到基因名 为了将探针ID映射到对应的基因名称,通常需要使用芯片平台注释文件(如GPL编号)。假设数据集中包含正确的注释信息,可使用 `table()` 或其他方法进行映射: ```r platform <- annotation(gse) # 获取平台信息,如 GPL编号 library(hgu133plus2.db) # 加载对应平台的注释包(以hgu133plus2为例) # 将探针ID转换为基因符号 probe_to_gene <- mapIds(hgu133plus2.db, keys = rownames(expression_data), column = "SYMBOL", keytype = "PROBEID") ``` #### 4. 过滤无效探针 部分探针可能无法映射到任何已知基因,应将其剔除: ```r valid_probes <- !is.na(probe_to_gene) expression_data <- expression_data[valid_probes, ] probe_to_gene <- probe_to_gene[valid_probes] # 使用基因名替换探针ID rownames(expression_data) <- probe_to_gene ``` #### 5. 数据标准化与质控 根据研究目的,可能需要对数据进行标准化处理,如log变换、去除批次效应等。例如使用 `limma` 包进行背景校正和归一化: ```r library(limma) # 背景校正与归一化 normalized_data <- normalizeBetweenArrays(expression_data, method = "quantile") ``` 此外,建议进行质量控制(QC),包括绘制箱线图、PCA分析和层次聚类,以识别异常样本或潜在的技术偏差。 ```r boxplot(normalized_data, main = "Boxplot of Normalized Data") plotMDS(normalized_data, main = "MDS Plot") ``` ### 总结 上述步骤涵盖了从GSE39582数据的下载、解析、注释转换到初步预处理的完整流程。这些操作使得数据具备了用于差异表达分析、功能富集分析等功能的能力[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值