我在GEO下载了一个表达文件,原始的count值是每个病人单独储存为一个文件。
我把所有病人的表达值放在一个文件夹下面,可以看到每一个文件都有两列,第一列为gene symbol,第二列为count值,并且每个病人的gene symbol排列顺序完全一致。
接下来,开始在R中读取文件。
#清空环境变量
rm(list = ls())
options(stringsAsFactors = F)
#列出目前文件下所有文件名,共有250个病人,250个文件。
fs=list.files("GSE106291_RAW/")
#把读取文件操作命名为一个函数,我们只读取文件下第2列count值,symbol名字不需要。
read <- function(x){
read.table(file.path('GSE106291_RAW/',x))[,2]
}
#按照文件名批量读取数据,得到的exp是一个list
exp <- lapply(fs,read)
#将list按列合并为矩阵(list十分规则,250个元素,每个元素含有23368个数值)
exp <- do.call(cbind,exp);dim(exp)
##[1] 23368 250
#读取其中一个样本,提取sambol列,给exp加上行名
sample1 <- read.table("GSE106291_RAW/GSM2835244_GEO-13_htseq_counts.txt")
rownames(exp) <- sample1$V1
fs[1:5]
##[1] "GSM2835244_GEO-13_htseq_counts.txt" "GSM2835245_GEO-14_htseq_counts.txt"
##[3] "GSM2835246_GEO-15_htseq_counts.txt" "GSM2835247_GEO-16_htseq_counts.txt"
#从fs中提取列名,列名为GSM283****,为前十个字符串
library(stringr)
colnames(exp) <- str_sub(fs,1,10)
exp[1:5,1:5] ### GSM2835244 GSM2835245 GSM2835246 GSM2835247 GSM2835248 ###1/2-SBSRNA4 72 0 8 68 23 ###A1BG 270 84 22 245 380 ###A1BG-AS1 32 59 7 60 126 ###A1CF 0 0 0 0 0 ###A2LD1 14 4 18 19 35
这样就可以得到一个完整的表达矩阵。