R语言R数据读取 清理数据-R语言-图表-决策-Linux-Python

生信人应这样学R语言

2018-12-28  本文已影响46人  看远方的星

一、介绍R语言及Rstudio

1、R是用于统计分析绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具
2、Rtudio

image.png

1)Source:(左上角1区): 代码的撰写
2)Console:(左下角2区): 执行代码的地方,执行结果也会显示在这里。
3)Environment, History, Connections:(右上角3区):

4)Files, Plots, Packages, Help, Viewer:(右下角4区):


二、R语言基础变量讲解

image.png image.png image.png
1、创建向量:
1)使用create创建向量 , c为create即g=c(1,10)
2)使用:创建向量即a=1:10
3)使用函数创建向量如B=LETTERS[1:10]a=seq(1,10)
附:字符串要加单引号,若字符串本身有单引号,则需要加双引号围住带有单引号的字符串
> g=c(1,10)      #使用create创建向量
> g
[1]  1 10
> str(g)        # 查看对象g的结构
 num [1:2] 1 10     
> a=seq(1,10)    #使用函数创建向量
> a
 [1]  1  2  3  4  5  6  7  8  9 10
> a=1:10   #使用:创建向量
> a
 [1]  1  2  3  4  5  6  7  8  9 10
> B=LETTERS[1:10]     #使用函数创建向量
> B
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J"
> c=("jack'jam")
> c
[1] "jack'jam"

2、使用dim加维度 :
dim(f)=c(2,5) #创建两行五列的维度
结果为:

image.png
赋值: f[1,2]='5' 将f的第一行第二列变成字符串5。此时f的类型变成字符型,画图一般要求为数值型,所以,进行该操作后无法画图。
> f[1,2]='5'
> str(f)
 chr [1:2, 1:5] "1" "2" "5" "4" "5" "6" "7" "8" "9" "10"
image.png

3、str(x) :查看对象x的结构。str是structure的缩写。

> str(a)
 int [1:2, 1:5] 1 2 3 4 5 6 7 8 9 10         # [1:2, 1:5] :表示两行五列
image.png

4、mode(x) :查看对象x的模式:空(NULL),数值(numeric),字符(character),逻辑(logical),复数(complex),列表(list),函数(function)。

> mode (a)
[1] "numeric"      #数值

5、class(x): 查看对象x的类型:除了mode里列出的几种类型外,还有整数(integer),矩阵(matrix),因子(factor),阵列(array),数据框(data frame),时间序列(ts) 等其他类型。mode主要用于区别数据存放的方式,而class是一种更细微的分类方式,比如矩阵,就是一种更“有序”的数据存放方式。此命令比mode常用。

> class(a)
[1] "matrix"          # 矩阵类型
> a=1:10
> dim(a)=c(2,5)   
> b=as.data.frame(a)
> b[1,2]='6'
> View(b)

左右对齐证明是存在不同类型的数据,即原本a的矩阵变成了b的数据框。
6、is系列函数(是否是)和as系列函数(转换)。
7、建立索引数据框

1) tmp=a[c(3,7,8),] :tmp为索引数据框,取a的3,7,8行(并不是第3,7,8行而是行的标题)所有列组成的数据框。

image.png
2)b=grep('RNA-Seq', a$Assay_Type) : b为索引数据框,取Assay_Type列中含有RNA-Seq的内容
结果(下标)为:
image.png
c=grepl('RNA-Seq', a$Assay_Type) :c为索引数据框,取Assay_Type列中含有RNA-Seq的内容并判断正误(有疑惑)
结果:
image.png

三、外部数据导入导出

基本操作:读,写,取。
read.table('tmp.txt', header=T):读取tmp.txt并取表头。(打完read.table,使用Tab键选择文件。)
comment.char='!' :去除带有!的内容。
write.csv(b,'afer.csv'):将b文件写入转成afer.csv文件。
d=read.csv(afer.csv): 读取afer.csv文件并赋值给d。
b=b[,-1]: 去除第一列内容。
seq='\t' : 指定制表符分割。
save(b, file='b_input.Rdata') : 将b文件转换成Rdata文件格式。


四、中级变量操作

掌握函数的规律,学会举一反三才是重点。

image.png
1、row.names=F : 去掉行名
sort(a$MBases,decreasing=T)[1] : 对a中的MBases这一列以降序排列并取第一个值(即求最大值)。
2、max(a$MBases): 求a中的MBases这一列的最大值。
3、求行平均值:
1)rowMeans(b)
2)for (i in 1:nrow(b)){print(mean(as.numeric(b[i,])))}
3)x=as.numeric(b[1,])appiy(b,1,function(x){mean(x)})
4、自定义函数并使用:
1)rowMax=function(x){apply(x,1,max)} #求行最大值
使用:rowMax(b)
2)jack = function(x){for(i in 1:nrow(b){x=as.numeric(b[i])y=x[1]+x[2]-x[3]+x[4]-x[5]+x[6] print(y)})}

5、apply(b,1,sd): 求每一行的方差
6、sort (apply(b,1,sd),decreasing=T)[1:50] 求最大方差(只取50个)
7、sample(1:nrow(b),50) : 从b的第一行到最后一行随机抽取50个数

五、热图(步骤:得到数据-->数据处理得到矩阵-->画图)

基本了解:
热图:表现一个数值矩阵,图上每一个小方格都是一个数值,按一条预设好的色彩变化尺(称为色键,Color Key),来给每个数值分配颜色,虽然看起来眼花,但道理却很简单。这幅图就是24个样本(列)中,30类基因(行)的表达情况。

image.png

https://www.sohu.com/a/225637183_170798
基因表达矩阵:基因表达数据通常利用矩阵形式表示,称为基因表达矩阵。基因表达矩阵的行代表一个基因在不同环境条件下或不同时间点的表达,列代表不同条件或样本下(如组织、实验条件、处理因素等)所有基因的表达情况,每个格子的数据表示特定的基因在特定的样本中的表达水平。

image.png image.png
> read.table('biodata/GSE93755-GPL17021_series_matrix.txt.gz')
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  : 
  line 79 did not have 2 elements

去除带有!内容并取表头:
共7列放不下放在后面


image.png

与Excel比较正确:


image.png
> a=read.table('biodata/GSE17215_series_matrix.txt',comment.char = '!',header = T)
> write.csv(a,'a1.csv')
> View(a)
image.png

rownames(a)=a[,1] :将第一列设置为行名,同时行名与列重复,需删除。得结果:


a=a[,-1]: 删除第一列(即与行名重复的列,行名那列不是第一列)得结果矩阵:

image.png
> a = log2(a)
> pheatmap::pheatmap(a[1:10,])

结果为:


image.png

六、选取差异明显的基因的表达量矩阵绘制热图

> save(a,file='d://data//dumData.Rdata')
> load('d://data//dumData.Rdata')

函数定义:
apply(X, MARGIN, FUN, ...)
参数列表:
X:数组、矩阵、数据框
MARGIN: 按行计算或按按列计算,1表示按行,2表示按列
FUN: 自定义的调用函数
…: 更多参数,可选
比如,对一个矩阵的每一行求和,下面就要用到apply做循环了。

> x<-matrix(1:12,ncol=3)
> apply(x,1,sum)
[1] 15 18 21 24

七、id转换

基本思路
1、去掉.分隔的后一部分(包含.):使用函数strsplit
2、三个表进行关联,整合信息。(依据两个表含有共同Id): 使用函数merge
3、出现重复,挑出重复部分:使用函数tableorder
4、去重,排序:使用函数duplicatedmatch


函数讲解

1、strsplit()是一个拆分函数,该函数可以使用正则表达式进行匹配拆分。
其命令形式为:strsplit(x, split, fixed= F, perl= F, useBytes= F)

2、R中的merge函数类似于Excel中的Vlookup,可以实现对两个数据表进行匹配和拼接的功能。与Excel不同之处在于merge函数有4种匹配拼接模式,分别为inner,left,right和outer模式。 其中inner为默认的匹配模式,可与sql语言中的join语句用法。

merge(x, y, by = intersect(names(x), names(y))
by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
      sort = TRUE, suffixes = c(".x",".y"),
      incomparables = NULL, ...)

b=merge(a, gis, by='ensembl_id', all.x=T): 合并a和gis数据框,以ensembl_id为共同列,并指定a内容全部保留。另一个命令同理,把b和gis合并数据。

3、函数table(求因子出现的频数):
使用格式为:
table(..., exclude = if (useNA == "no") c(NA, NaN), useNA = c("no", "ifany", "always"), dnn = list.names(...), deparse.level = 1)

4、order:排序(默认升序,decreasing=T时为降序)

> d=1:10
> order(d)
 [1]  1  2  3  4  5  6  7  8  9 10
> order(d,decreasing = T)
 [1] 10  9  8  7  6  5  4  3  2  1

例子:d=d[order(d$v1),]:d根据d中的v1列排序,再赋值给d

5、duplicated函数是一个可以用来解决向量或者数据框重复值的函数,它会返回一个TRUE和FALSE的向量,以标注该索引所对应的值是否是前面数据所重复的值。(重复的值标记为TRUE,比如三个值一样,会被标记出一个FALSE和两个TRUE

例子:d=d[!duplicated(d$v1)] :先找出d中v1重复的部分标记为TRUE,再取反( ),TRUE变成FALSE,FALSE变成TRUE,TRUE就是去掉重复部分的正确值。
参考文章:http://blog.sina.com.cn/s/blog_bcc268080102wt3i.html

6、match函数:匹配函数,返回x对应值在table中是否存在,并从1开始编号。
用法:
match(x,table,nomatch,incomparables)
x是查询对象,table是待匹配的向量,nomatch是不匹配项的设置值(默认为NA值),incomparables设置table表中不参加匹配的数值,默认为NULL

例子:d=d[match(a\$v1, d$v1),]:把a中v1列的顺序匹配到d中v1列再将其赋值给d。


八、任意基因任意矩阵任意癌症表达量分组的生存分析

1、基本了解:


2、基本思路:实现一个基因在TCGA数据库里的生存关系图

第一种办法:使用网页工具: OncoLnchttp://www.oncolnc.org/
第二种办法:使用R语言:由于需要数据,所以还是需要到网站下载:
1)得到数据框:去到OncoLnc,在搜索框输入ARHGAP18。提交进入,选择一个刚兴趣的进入,在两个框各输入50,提交得出图片,点击click here下载文件得到画图的数据框,并放到R的工作目录。

image.png
image.png
2、画图:
> dat=read.csv('biodata/BLCA_93663_50_50.csv',header = T,sep = ',', fill = T)
> View(dat)
image.png

install.packages('ggstatsplot')出现问题:


image.png

九、任意基因任意癌症表达量和临床性状关联

第一种办法:使用网页工具
进入http://www.cbioportal.org/ 选择Ovary/Fallopian Tube (卵巢或输卵管)选择第一篇文章 在Enter Genes:第二个框输入人类基因ARHGAP18,提交。

image.png
得出结果:点击plot,根据你想知道的表达量,对左侧进行微调,得到最终结果。
image.png
附:得到数据(第二种办法):点击右上方图标,选择Data,下载得到plot.txt。
image.png

第二种办法:使用R语言
1)得到数据:见第一种办法。
2)将plot.txt放到R的工作目录。并执行以下代码:

rm(list = ls()) 
options(stringsAsFactors = F)
a=read.table('plot.txt',header = T,sep = '\t',fill = T)
colnames(a)=c('id','stage','gene','mut')
dat=a
library(ggstatsplot)
ggbetweenstats(data = dat,x=stage,y=gene)

得到结果:


image.png
image.png

十、表达矩阵的样本的相关性
整体思路:
1.学会比较相关性即得出相关系数。
2.学会删除低表达和不表达基因。

> a=rnorm(10)   # 产生随机10个数
> b=10*a+rnorm(10)
> cor(a,b)       # 求a,b的相关性
[1] 0.9950829

Bioconductor的包:数据包、功能函数包、注释包

> rm(list = ls())
> options(stringsAsFactors = F)
> library(airway)
载入需要的程辑包:SummarizedExperiment
载入需要的程辑包:GenomicRanges
载入需要的程辑包:stats4
载入需要的程辑包:BiocGenerics
载入需要的程辑包:parallel

载入程辑包:‘BiocGenerics’

The following objects are masked from ‘package:parallel’:

    clusterApply, clusterApplyLB, clusterCall, clusterEvalQ, clusterExport,
    clusterMap, parApply, parCapply, parLapply, parLapplyLB, parRapply,
    parSapply, parSapplyLB

The following objects are masked from ‘package:stats’:

    IQR, mad, sd, var, xtabs

The following objects are masked from ‘package:base’:

    anyDuplicated, append, as.data.frame, basename, cbind, colMeans,
    colnames, colSums, dirname, do.call, duplicated, eval, evalq, Filter,
    Find, get, grep, grepl, intersect, is.unsorted, lapply, lengths, Map,
    mapply, match, mget, order, paste, pmax, pmax.int, pmin, pmin.int,
    Position, rank, rbind, Reduce, rowMeans, rownames, rowSums, sapply,
    setdiff, sort, table, tapply, union, unique, unsplit, which, which.max,
    which.min

载入需要的程辑包:S4Vectors

载入程辑包:‘S4Vectors’

The following object is masked from ‘package:base’:

    expand.grid

载入需要的程辑包:IRanges

载入程辑包:‘IRanges’

The following object is masked from ‘package:grDevices’:

    windows

载入需要的程辑包:GenomeInfoDb
载入需要的程辑包:Biobase
Welcome to Bioconductor

    Vignettes contain introductory material; view with 'browseVignettes()'.
    To cite Bioconductor, see 'citation("Biobase")', and for packages
    'citation("pkgname")'.

载入需要的程辑包:DelayedArray
载入需要的程辑包:matrixStats

载入程辑包:‘matrixStats’

The following objects are masked from ‘package:Biobase’:

    anyMissing, rowMedians

载入需要的程辑包:BiocParallel

载入程辑包:‘DelayedArray’

The following objects are masked from ‘package:matrixStats’:

    colMaxs, colMins, colRanges, rowMaxs, rowMins, rowRanges

The following objects are masked from ‘package:base’:

    aperm, apply

Warning message:
程辑包‘matrixStats’是用R版本3.5.2 来建造的 
> data(airway)
> exprSet=assay(airway)
> colnames(exprSet)
[1] "SRR1039508" "SRR1039509" "SRR1039512" "SRR1039513" "SRR1039516" "SRR1039517"
[7] "SRR1039520" "SRR1039521"
> cor(exprSet[,1],exprSet[,2])      #求第一列基因和第二列基因的相关性
[1] 0.9632268

exprSet的内容:行为基因,列为样本


image.png
> cor(exprSet)   # 求表达矩阵样本的相关性
           SRR1039508 SRR1039509 SRR1039512 SRR1039513 SRR1039516 SRR1039517
SRR1039508  1.0000000  0.9632268  0.9431333  0.8978772  0.9476515  0.9014495
SRR1039509  0.9632268  1.0000000  0.9323701  0.9428196  0.9202060  0.9290967
SRR1039512  0.9431333  0.9323701  1.0000000  0.9592993  0.9291853  0.9203183
SRR1039513  0.8978772  0.9428196  0.9592993  1.0000000  0.8834640  0.9498761
SRR1039516  0.9476515  0.9202060  0.9291853  0.8834640  1.0000000  0.9313570
SRR1039517  0.9014495  0.9290967  0.9203183  0.9498761  0.9313570  1.0000000
SRR1039520  0.9603249  0.9398292  0.9827034  0.9413725  0.9298860  0.9030552
SRR1039521  0.9023008  0.9463991  0.9525262  0.9853059  0.8724714  0.9291902
           SRR1039520 SRR1039521
SRR1039508  0.9603249  0.9023008
SRR1039509  0.9398292  0.9463991
SRR1039512  0.9827034  0.9525262
SRR1039513  0.9413725  0.9853059
SRR1039516  0.9298860  0.8724714
SRR1039517  0.9030552  0.9291902
SRR1039520  1.0000000  0.9559571
SRR1039521  0.9559571  1.0000000

画图:pheatmap::pheatmap(cor(exprSet))得到结果:

附:
1、更新R:
install.packages("installr")
library(installr)
updateR()
2、如何安装R包:

if (!requireNamespace("BiocManager", quietly = TRUE)) 
install.packages("BiocManager") ##判断是否存在BiocManager包,不存在的话安装
options()$repos  ## 查看使用install.packages安装时的默认镜像
options()$BioC_mirror ##查看使用bioconductor的默认镜像
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/") ##指定镜像,这个是中国科技大学镜像
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/")) ##指定install.packages安装镜像,这个是清华镜像

tabie(x>1) #统计x>1的频数
sum(x>1)>5   # 将x>1的频次相加,并筛选出大于5的基因
x=exprSet[2,]   #x赋值为exprSet的第二行
apply(exprSet,1,function(x)sum(x>1)>5) 对exprSet矩阵中的行进行自定义函数的处理即判断每一行的和是否大于5。
exprSet=exprSet[apply(exprSet,1,function(x)sum(x>1)>5), ] #筛选出表达量合格的基因

附:小技巧:Ctrl+L : 清空console的内容

group_list=colData(airway)[,3]     #colData 待理解
tmp=data.frame(g=group_list) #将group_list转变成数据框并赋值给tmp
M=cor(log2(exprSet+1))

十一、芯片表达矩阵下游分析:
boxplot 用于绘制箱线图

十二、RNA-seq 表达矩阵差异分析

rm(list = ls()) 
options(stringsAsFactors = F)
library(airway)
data("airway")
exprSet=assay(airway)
colnames(exprSet)
group_list=colData(airway)[,3]

exprSet=exprSet[apply(exprSet, 1,function(x)sum(x>1)>5),]
table(group_list)
> table(group_list)
group_list
  trt untrt 
    4     4 
exprSet[1:4,1:4]
> exprSet[1:4,1:4]
                SRR1039508 SRR1039509 SRR1039512 SRR1039513
ENSG00000000003        679        448        873        408
ENSG00000000419        467        515        621        365
ENSG00000000457        260        211        263        164
ENSG00000000460         60         55         40         35
dev.off()
boxplot(exprSet)

附:

> data("airway")
Warning message:
In data("airway") : 没有‘airway’这个数据集

airway位于bioconductor,


友情阅读推荐:

上一篇 下一篇

猜你喜欢

热点阅读