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

一、舉例介紹

本節下載GSE1009數據集,使用limma包進行差異分析舉例。

GSE1009??

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

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

平臺:GPL8300。

二、差異分析舉例:

###第一步:GEO數據下載

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

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


>rm(list = ls())?

#清除所有變量


>options(stringsAsFactors=F)

#R導入數據時不自動轉換為因子變量


##下面需要安裝GEOquery包,用于下載GEO數據庫的文件,已經安裝GEOquery包不需要重復安裝,直接調用GEOquery包。

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

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

#install.packages("BiocManager")

#BiocManager::install("GEOquery")

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



復制上面紅色這段即可。

##下面是用GEOquery包下載數據

>library(GEOquery)?

#加載GEOquery包


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

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

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


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

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


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

#查看GSE1009_series_matrix矩陣的平臺文件


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

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


總體先看看上面數據下載代碼:


代碼運行過程及結果:


運行代碼后Rfile中的文件:


###第二步:數據整理(將探針ID給為基因symbol)

>a=gset[[1]]

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


>dat=exprs(a)

#提取a中的表達矩陣并賦值給dat,這時的表達矩陣的基因名字為探針ID


>head(dat)

#展示表達矩陣的前6行,看下數據是否經過log轉換,一般數據在20以內,是經過log轉換的,若有成百上千的數據,表示這個數據還需要進一步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")}

#也可以輸入上面這段代碼,如果數據已經經log后,顯示log2 transform not needed;如果數據沒有盡行log,需要log程序按照代碼盡行log轉換,完成后顯示log2 transform finished。


再看看轉換后的數據:


不是成千上百的啦。

>pd=pData(a)

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


>View(pd)

#查看pd


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


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

##安裝字符分割包stringr包,命令如下,已經安裝過的可以直接調用,不用重復安裝。

#install.packages("stringr")

>library(stringr)

#調用stringr包


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

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


>table(group_list)

#計數每一組個數


>gpl1<-Table(gpl)

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

#我們將平臺文件轉為list格式,并賦值給gpl1,將gpl1保存為R文件,方便以后調用。


>colnames(Table(gpl))

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


>View(gpl1)

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


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


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


現在是不是變成唯一啦。

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

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

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

#將列名改為probe_id和symbol

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

>length(unique(probe2symbol_df$symbol))

#查看symbol為唯一值的個數


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

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


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

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


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

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

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


>dat=dat[ids$probe_id,]

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


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

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


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

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


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

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

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


>dat=dat[ids$probe_id,]

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


>rownames(dat)=ids$symbol ?

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

>View(dat)


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

>dat<-dat[-9173,]

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


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

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

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




現在看看,整體代碼如下:



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


整理好的數據如下:


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容