12.GEO數(shù)據(jù)集的R語言差異分析和代碼解析—1.數(shù)據(jù)下載和整理

一、舉例介紹

本節(jié)下載GSE1009數(shù)據(jù)集,使用limma包進行差異分析舉例。

GSE1009?

樣本量:共6個樣本,其中3個為糖尿病腎病(DN)腎小球樣本,另3個為正常腎小球樣本。

使用芯片:Affymetrix Human Genome U95 Version 2 Array。

平臺:GPL8300。

二、差異分析舉例:

###第一步:GEO數(shù)據(jù)下載

>setwd("D:\\Rfile")??

#設(shè)置工作目錄為D 盤的Rfile文件夾,大家可根據(jù)自己需要設(shè)置工作目錄。

>rm(list = ls())?

#清除所有變量

>options(stringsAsFactors=F)

#R導(dǎo)入數(shù)據(jù)時不自動轉(zhuǎn)換為因子變量

##下面需要安裝GEOquery包,用于下載GEO數(shù)據(jù)庫的文件,已經(jīng)安裝GEOquery包不需要重復(fù)安裝,直接調(diào)用GEOquery包。

#安裝命令如下(本人已經(jīng)安裝了,所以只給出安裝命令,去掉前面的注釋符號即可安裝):

#if (!requireNamespace("BiocManager", quietly = TRUE))

#install.packages("BiocManager")

#BiocManager::install("GEOquery")

#bioconductor中的包的安裝命令經(jīng)常更新,如果大家怕安裝命令已經(jīng)更新了,現(xiàn)在的命令不能運行,可以百度“GEOquerybioconductor”進入主頁,下拉到安裝命令處,將網(wǎng)站上的最新安裝命令復(fù)制即可,這就是最新的安裝命令,其他bioconductor中的包的安裝是一樣的道理。具體如下:

復(fù)制上面紅色這段即可。

##下面是用GEOquery包下載數(shù)據(jù)

>library(GEOquery)?

#加載GEOquery包

>gset <- getGEO("GSE1009",destdir = ".",AnnotGPL = F,getGPL = F) ???????????????

#下載GSE1009表達矩陣文件并賦值給gset變量,destdir = "."表示下載后的文件放在什么地方,默認為當前工作目錄。AnnotGPL = F表示不下載注釋文件,getGPL = F表示不下載平臺文件。我們這里為了下載速度,就設(shè)置成不下載平臺文件和注釋文件。

#下載好后打開D盤,可看到Rfile中有一個“GSE1009_series_matrix.txt.gz”文件。

>save(gset,file = 'GSE1009.gset.Rdata')

#將gset(也就是下載后的GSE1009矩陣文件)保存為R文件,文件名為“GSE1009.gset”方便以后調(diào)用。

>gset[["GSE1009_series_matrix.txt.gz"]]@annotation

#查看GSE1009_series_matrix矩陣的平臺文件

>gpl <- getGEO('GPL8300', destdir=".")

#下載這個平臺文件。用于后面基因symbol注釋。

總體先看看上面數(shù)據(jù)下載代碼:

代碼運行過程及結(jié)果:

運行代碼后Rfile中的文件:

###第二步:數(shù)據(jù)整理(將探針I(yè)D給為基因symbol)

>a=gset[[1]]

#提取gset中第一個元素(包含基因表達矩陣和注釋信息),并賦值給變量a

>dat=exprs(a)

#提取a中的表達矩陣并賦值給dat,這時的表達矩陣的基因名字為探針I(yè)D

>head(dat)

#展示表達矩陣的前6行,看下數(shù)據(jù)是否經(jīng)過log轉(zhuǎn)換,一般數(shù)據(jù)在20以內(nèi),是經(jīng)過log轉(zhuǎn)換的,若有成百上千的數(shù)據(jù),表示這個數(shù)據(jù)還需要進一步log處理。

>ex <- dat

qx <- as.numeric(quantile(ex, c(0., 0.25, 0.5, 0.75, 0.99, 1.0), na.rm=T))

LogC <- (qx[5] > 100) ||

??(qx[6]-qx[1] > 50 && qx[2] > 0) ||

??(qx[2] > 0 && qx[2] < 1 && qx[4] > 1 && qx[4] < 2)

if (LogC) { ex[which(ex <= 0)] <- NA

dat <- log2(ex)

print("log2 transform finished")}else{print("log2 transform not needed")}

#也可以輸入上面這段代碼,如果數(shù)據(jù)已經(jīng)經(jīng)log后,顯示log2 transform not needed;如果數(shù)據(jù)沒有盡行l(wèi)og,需要log程序按照代碼盡行l(wèi)og轉(zhuǎn)換,完成后顯示log2 transform finished。

再看看轉(zhuǎn)換后的數(shù)據(jù):

不是成千上百的啦。

>pd=pData(a)

#查看a的臨床信息,為后面選擇用于分組的變量做準備

>View(pd)

#查看pd

本例中pd共有26個變量(未完全展示),我們可以看到只有title下的字段可以分為正常、疾病,其余變量下的字段都是一樣的,所以我們選擇title字段用于后續(xù)分組。

Title變量中的記錄為control 1a....Diabetes 1a.......,中間用空格分割,我們需要提取出Control和Diabetes作為分組,所以需要用字符分割包來實現(xiàn)。

##安裝字符分割包stringr包,命令如下,已經(jīng)安裝過的可以直接調(diào)用,不用重復(fù)安裝。

#install.packages("stringr")

>library(stringr)

#調(diào)用stringr包

>group_list=str_split(pd$title,' ',simplify = T)[,1]

#把pd中title變量的字段,按照空格分割,為了給大家展示,我們先運行分割代碼,分割后如下圖所示,所以我們選擇分割后的第一列即為分組狀態(tài)

>table(group_list)

#計數(shù)每一組個數(shù)

>gpl1<-Table(gpl)

>save(gpl1,file = 'gpl1.Rdata')

#我們將平臺文件轉(zhuǎn)為list格式,并賦值給gpl1,將gpl1保存為R文件,方便以后調(diào)用。

>colnames(Table(gpl))

#查看平臺文件的列名,我們看到有ID和gene symbol,記住gene symbol在第幾列,我們這里在第11列。

>View(gpl1)

#再了解一下平臺文件的數(shù)據(jù),當然這里大家可以直接選擇gene symbol字段也行,主要了解一下symbol中基因symbol值是否只有一個。

我們這里的gene symbol字段中的symbol,有的基因就不止一個名稱,///后面有重名,我們需要第一個名字,所以需要用字符分割包再處理一下,原理同上面處理title一樣。

>gpl1$`Gene Symbol`=str_split(gpl1[,11],'///',simplify = T)[,1]

現(xiàn)在是不是變成唯一啦。

>probe2symbol_df<-gpl1[,c(1,11)]

#提取平臺文件gpl1中的ID和gene symbol,并賦值給probe2symbol_df

>colnames(probe2symbol_df)=c('probe_id','symbol')

#將列名改為probe_id和symbol

#這兩步是因為我懶,不想再調(diào)整代碼,為了方便后面代碼運行,我改的,大家也可以不改。

>length(unique(probe2symbol_df$symbol))

#查看symbol為唯一值的個數(shù)

>table(sort(table(probe2symbol_df$symbol)))

#查看每個基因出現(xiàn)n次的個數(shù),我們可以看到,symbol出現(xiàn)一次的基因有7050個,出現(xiàn)2次有1493個。。。

>ids=probe2symbol_df[probe2symbol_df$symbol != '',]

#去掉沒有注釋symbol的探針(其實這里沒有注釋的探針數(shù)量即為上面出現(xiàn)次數(shù)最多的基因440,也就是說有440個探針沒有symbol)

>ids=probe2symbol_df[probe2symbol_df$probe_id %in% ?rownames(dat),] ??

##%in%用于判斷是否匹配,

#注意這里dat是gset表達矩陣的數(shù)據(jù),這一步就是把平臺文件的ID和矩陣中的ID匹配。

>dat=dat[ids$probe_id,]

#取表達矩陣中可以與探針名匹配的那些,去掉無法匹配的表達數(shù)據(jù)

>ids$mean=apply(dat,1,mean) ?

#ids新建mean這一列,列名為mean,同時對dat這個矩陣按行操作,取每一行(即每個樣本在這個探針上的)的均值,將結(jié)果給到mean這一列的每一行,這里也可以改為中位值,median.

>ids=ids[order(ids$symbol,ids$mean,decreasing = T),] ???

#即先按symbol排序,相同的symbol再按照均值從大到小排列,方便后續(xù)保留第一個值。

>ids=ids[!duplicated(ids$symbol),] ?

#將symbol這一列取出重復(fù)項,'!'為否,即取出不重復(fù)的項,去除重復(fù)的gene

#取median的話,這樣就保留每個基因最大表達量結(jié)果.最后得到n個基因。

>dat=dat[ids$probe_id,]

#新的ids取出probe_id這一列,將dat按照取出的這一列,用他們的每一行組成一個新的dat

>rownames(dat)=ids$symbol ?

#把ids的symbol這一列中的每一行給dat作為dat的行名

>View(dat)

現(xiàn)在就得到行名為基因名,列名為樣本名字的矩陣啦。

>dat<-dat[-9173,]

但是我們看到矩陣最后一行,是沒有symbol名字的,我們把他去掉,數(shù)字自己更改。

>save(dat,group_list,file = 'GSE1009.Rdata')

>write.csv(dat,file="GSE1009expressionmetrix_GSE.csv")

#最后我們把結(jié)果保存。下一節(jié)會講解差異分析。

現(xiàn)在看看,整體代碼如下:

運行后的Rfile中的文件如下:

整理好的數(shù)據(jù)如下:

作者:NiKasu

鏈接:http://www.itdecent.cn/p/fe6feecd4dd0

來源:簡書

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容