| 问答社区:http://www.omicsclass.com/ | 组学大讲堂公众号 | 生信课堂 |
| 课程推荐1:R语言入门与基础绘图 | 课程推荐2:R语言绘图(ggplot) | 所有生信课程:点击 |
R语言是于1991年由新西兰奥克兰大学的Robert Gentleman 和 Ross Ihaka 及其他志愿人员开发的一个语言系统。因为这两个开发者的名字都是以字母R开头,所以就叫做R语言,R是用于统计分析、绘图的语言和操作环境。
1)专门为生物统计而生的语言
R的开发最初是要解决生物统计方面的问题,创始人之一的Robert Gentleman,就是一位生物学家。所以,R最开始就是用来做生物统计,这个人后来又开发Bioconductor包,专门用来收录与高通量测序生物数据分析相关包的数据库。目前Bioconductor已经收录了大量的生物数据分析相关的包,包括做转录组差异分析的常用包DEseq2,edgeR,芯片数据分析相关的limma、affy包等等,目前已经收录了1741包(截止2019.6.30)。当然R语言不止只有Bioconductor,还有CRAN也收录了很多R包。
2)开源免费
1995年, Martin Michler 说服Ross 和Robert在GNU这个许可证下授权,这使得R成为了一个免费的软件。R软件是一款非常优秀的数据分析软件,市面上也有很多其他流行的统计和绘图软件,例如微软公司的Excel,SAS,IBM 公司的SPSS,Stata,S-PLUS以及Matlab等。这些软件当中大多都是商业软件需要支付高昂的费用才能使用,而R语言则是免费的,R是一个全面的统计研究平台,提供了各式各样的数据分析技术,几乎可以完成任何类型的数据分析工作,并且R拥有顶尖的绘图功能,可以绘制非常专业精美的图形。
3)优秀的绘图功能
R语言为统计而生,而我们生物数据分析当中很多地方都需要用到统计分析,所以说掌握R语言是学生物学生的基本技能。数据在统计分析之后,最重要的就是要把结果可视化的展示出来,而R语言也有非常强大的绘图功能,很多高水平杂志当中漂亮的图都是应用R语言绘制的.
image
1)学习R
image
2)R语言编程艺术
image
3)R语言实战
读完前两本书,结合例子学习更佳:
R语言解释器可根据自己的操作系统选择下载安装,选择中国的镜像地址下载速度快:
| 地址 | 说明 |
|---|---|
| https://mirrors.tuna.tsinghua.edu.cn/CRAN/ | TUNA Team, Tsinghua University |
| http://mirrors.tuna.tsinghua.edu.cn/CRAN/ | TUNA Team, Tsinghua University |
| https://mirrors.ustc.edu.cn/CRAN/ | University of Science and Technology of China |
| http://mirrors.ustc.edu.cn/CRAN/ | University of Science and Technology of China |
| https://mirror-hk.koddos.net/CRAN/ | KoDDoS in Hong Kong |
| https://mirrors.eliteu.cn/CRAN/ | Elite Education |
| https://mirror.lzu.edu.cn/CRAN/ | Lanzhou University Open Source Society |
| http://mirror.lzu.edu.cn/CRAN/ | Lanzhou University Open Source Society |
| https://mirrors.tongji.edu.cn/CRAN/ | Tongji University |
具体下载地址: 目前最新版本4.4.0(2024.06.11),如果要下载最新版本,可以到上面网址查找最新版本下载。 最新版本 下载地址:https://mirrors.tuna.tsinghua.edu.cn/CRAN/
1)下载地址:
Rstudio 为R语言的专业编辑器,有代码的提示,高亮显示等等功能,强烈推荐使用,初学者根据自己的操作系统下载RStudio Desktop 免费版本就可以:
官方下载网址:https://www.rstudio.com/products/rstudio/download/
2)常见问题解答:
Rstudio中文乱码:http://www.omicsclass.com/article/294
install.packages("ggplot2")
#加快安装速度设置镜像
install.packages("ggplot2",repos="http://mirrors.tuna.tsinghua.edu.cn/CRAN/")
#可以设置全局镜像加快安装速度,推荐全局设置镜像,一些依赖包都可以默认这个镜像下载,安装更快:
local({r <- getOption("repos")
r["CRAN"] <- "http://mirrors.tuna.tsinghua.edu.cn/CRAN/"
options(repos=r)})
install.packages("ggplot2")
#多个包一起安装:
install.packages(c("poppr", "mmod", "magrittr", "treemap"), repos = "http://mirrors.tuna.tsinghua.edu.cn/CRAN/",dependencies = TRUE)
网站:https://www.bioconductor.org/
#设置国内的镜像地址,加快安装进度
options(BioC_mirror="https://mirrors.tuna.tsinghua.edu.cn/bioconductor")
#安装bioconductor中的包管理BiocManager,if如果没有安装则安装一下
if(!requireNamespace("BiocManager", quietly = TRUE)){
install.packages("BiocManager")
}
#安装bioconductor中DESeq2这个包
BiocManager::install("DESeq2")
github上的包可以用devtools或者remotes包安装
install.packages("devtools")
devtools::install_github('cole-trapnell-lab/monocle3')
install.packages("remotes") # 首先安装 remote 包
remotes::install_github("GuangchuangYu/nCov2019") # 尝试安装
library(ggplot2)
#或者
require(ggplot2)
#加载包时,如果报错说明包没有安装成功
#获取帮助信息
?plot
example(plot)
?install.packages
??geto
#如果你还记得你的电脑中存在某个方法可以实现某些统计分析功能,但又想不起该方法属于哪个包时:
help.search("geto")
#设置国内的镜像地址,加快安装进度
options(BioC_mirror="https://mirrors.tuna.tsinghua.edu.cn/bioconductor")
#安装bioconductor中的包管理BiocManager,if如果没有安装则安装一下
if(!requireNamespace("BiocManager", quietly = TRUE)){
install.packages("BiocManager")
}
local({r <- getOption("repos")
r["CRAN"] <- "http://mirrors.tuna.tsinghua.edu.cn/CRAN/"
options(repos=r)})
install.packages("ggplot2")
根据数据分析需求,选用不同的数据对象类型,包括:
标量Scalar
R里面基础的数据类型包括:Scalar :character ,integer, logical, double
# "hello R "
# 44
# -32.43
# TRUE
# FALSE
x <- "my first R script"
y<- 1
z<-TRUE
x
## [1] "my first R script"
y
## [1] 1
z
## [1] TRUE
#关于字符串的一些操作方法
#连接字符串 - paste()函数
#使用方法
#paste(..., sep = " ")
#...表示要组合的任意数量的自变量。
#sep表示参数之间的任何分隔符。它是可选的。
a <- "Hello"
b <- 'How'
c <- "are you? "
变量的命名注意事项
R语言里面习惯用 . : avg.clicks
其他语言:avg_Clicks , avgClicks
变量赋值 = or <- or ->
赋值符号区别:http://www.omicsclass.com/article/722
向量Vector
向量就像excel里面的一行,每个格子里面可以放一个标量
a<-c(1,2,3,4,5)
b<-c("one","two","three")
c<-c(TRUE,TRUE,FALSE)
d<-1:100
a
## [1] 1 2 3 4 5
b
## [1] "one" "two" "three"
c
## [1] TRUE TRUE FALSE
d
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
## [19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
## [37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
## [55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
## [73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
## [91] 91 92 93 94 95 96 97 98 99 100
#如果其中一个元素是字符,则非字符值被强制转换为字符类型。
s <- c('apple','red',5,TRUE)
print(s)
## [1] "apple" "red" "5" "TRUE"
rep(1:4,each=2)
## [1] 1 1 2 2 3 3 4 4
seq(from=22,to=50,by=3)
## [1] 22 25 28 31 34 37 40 43 46 49
#或者
seq(22,44,2)
## [1] 22 24 26 28 30 32 34 36 38 40 42 44
#向量的操作
#1.索引获取向量中的值
a<-1:10
a[1]
## [1] 1
a[2]
## [1] 2
a[1:3]
## [1] 1 2 3
a[c(1,4,3,7)]
## [1] 1 4 3 7
#2.逻辑筛选获得想要的值
a>3
## [1] FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
a3<-a[a>3]
#名字筛选对应的值
letters
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
letters[1:10]
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
names(a)<-letters[1:10]
a
## a b c d e f g h i j
## 1 2 3 4 5 6 7 8 9 10
a["b"]
## b
## 2
#向量值的修改
a
## a b c d e f g h i j
## 1 2 3 4 5 6 7 8 9 10
a[5]<-33
a
## a b c d e f g h i j
## 1 2 3 4 33 6 7 8 9 10
a[1:3]<-1
a
## a b c d e f g h i j
## 1 1 1 4 33 6 7 8 9 10
a[a>3]<-55
a
## a b c d e f g h i j
## 1 1 1 55 55 55 55 55 55 55
a[a>3]<-NA
a
## a b c d e f g h i j
## 1 1 1 NA NA NA NA NA NA NA
可以添加,减去,相乘或相除两个相同长度的向量,将结果作为向量输出。
R里面的算术运算符
# 创建两个向量
v1 <- c(3,8,4,5,0,11)
v2 <- c(4,11,0,8,1,2)
# 向量相加
add.result <- v1+v2
add.result
## [1] 7 19 4 13 1 13
# 向量相减
sub.result <- v1-v2
sub.result
## [1] -1 -3 4 -3 -1 9
# V向量的乘法
multi.result <- v1*v2
multi.result
## [1] 12 88 0 40 0 22
# 向量除法
divi.result <- v1/v2
divi.result
## [1] 0.7500000 0.7272727 Inf 0.6250000 0.0000000 5.5000000
#向量比较操作符,当然标量也可以比较
#>、<、>=、<=、==、!=
x<-c(3,4,9,3,424,63,2,5,1,1)
y<-c(2,3,3,3,5,8,9)
length(x)
## [1] 10
length(y)
## [1] 7
x>4
## [1] FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE
x>y
## Warning in x > y: longer object length is not a multiple of shorter object
## length
## [1] TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE
#向量元素循环利用
#如果我们对不等长的两个向量应用算术运算,则较短向量的元素被循环以完成操作。
v1 <- c(3,8,4,5,0,11)
v2 <- c(4,11)
# V2 becomes c(4,11,4,11,4,11)
add.result <- v1+v2
add.result
## [1] 7 19 8 16 4 22
sub.result <- v1-v2
sub.result
## [1] -1 -3 0 -6 -4 0
因子(Factors),因子的创建方法用factor().
diabetes<-c("T1","T1","T2","T3")
diabetes
## [1] "T1" "T1" "T2" "T3"
diabetes<-factor(diabetes)
diabetes
## [1] T1 T1 T2 T3
## Levels: T1 T2 T3
#指定有序因子
status<-c("Poor","Improved","Excellent","Poor")
status<-factor(status)
status
## [1] Poor Improved Excellent Poor
## Levels: Excellent Improved Poor
status<-c("Poor","Improved","Excellent","Poor")
status<-factor(status,order=TRUE)
status
## [1] Poor Improved Excellent Poor
## Levels: Excellent < Improved < Poor
status<-c("Poor","Improved","Excellent","Poor")
status<-factor(status,order=TRUE,levels=c("Poor","Improved","Excellent"))
status
## [1] Poor Improved Excellent Poor
## Levels: Poor < Improved < Excellent
###因子的用处:给数据分组, 适用不同的统计方法(后面课程会详细说明)
nlevels(status)
## [1] 3
levels(status)
## [1] "Poor" "Improved" "Excellent"
方法matrix()用于创建一个矩阵,矩阵数据类型只能是一种
y<-matrix(1:12,nrow=3,ncol=4)
y
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
y<-matrix(1:12,nrow=3,ncol=4,byrow = TRUE)
y
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
#数组 数组和矩阵类似
z<-array(1:24, c(3,4,2))
z
## , , 1
##
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
##
## , , 2
##
## [,1] [,2] [,3] [,4]
## [1,] 13 16 19 22
## [2,] 14 17 20 23
## [3,] 15 18 21 24
数据框,重点
数据框与矩阵类似,也是二维的。与矩阵不同的是,数据框中各列的数据类型可以不同,但长度必须相同。
#创建方法:data.frame
patientID<-c(1,2,3,4)
age<-c(22,33,43,24)
diabetes<-c("t1","t2","t1","t1")
status=c("Poor","Improved","Excellent","Poor")
status=factor(status,order=TRUE,levels=c("Poor","Improved","Excellent"))
patientData<-data.frame(patientID,age,diabetes,status)
patientData
############################
#data.frame 常用方法
###########################
#获取数据框一些属性的方法
mtcars
head(mtcars)
tail(mtcars)
colnames(mtcars)
## [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear"
## [11] "carb"
rownames(mtcars)
## [1] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710"
## [4] "Hornet 4 Drive" "Hornet Sportabout" "Valiant"
## [7] "Duster 360" "Merc 240D" "Merc 230"
## [10] "Merc 280" "Merc 280C" "Merc 450SE"
## [13] "Merc 450SL" "Merc 450SLC" "Cadillac Fleetwood"
## [16] "Lincoln Continental" "Chrysler Imperial" "Fiat 128"
## [19] "Honda Civic" "Toyota Corolla" "Toyota Corona"
## [22] "Dodge Challenger" "AMC Javelin" "Camaro Z28"
## [25] "Pontiac Firebird" "Fiat X1-9" "Porsche 914-2"
## [28] "Lotus Europa" "Ford Pantera L" "Ferrari Dino"
## [31] "Maserati Bora" "Volvo 142E"
nrow(mtcars)
## [1] 32
ncol(mtcars)
## [1] 11
row.names(mtcars)
## [1] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710"
## [4] "Hornet 4 Drive" "Hornet Sportabout" "Valiant"
## [7] "Duster 360" "Merc 240D" "Merc 230"
## [10] "Merc 280" "Merc 280C" "Merc 450SE"
## [13] "Merc 450SL" "Merc 450SLC" "Cadillac Fleetwood"
## [16] "Lincoln Continental" "Chrysler Imperial" "Fiat 128"
## [19] "Honda Civic" "Toyota Corolla" "Toyota Corona"
## [22] "Dodge Challenger" "AMC Javelin" "Camaro Z28"
## [25] "Pontiac Firebird" "Fiat X1-9" "Porsche 914-2"
## [28] "Lotus Europa" "Ford Pantera L" "Ferrari Dino"
## [31] "Maserati Bora" "Volvo 142E"
dim(mtcars)
## [1] 32 11
#数据框的合并,后面会学习
#rbind
#cbind
#merge
###########数据框数据的筛选##################
#行列索引提取
mtcars[1:2,]
mtcars[,3:5]
#一起用
mtcars[1:2,3:5]
#不连续
mtcars[c(2,4),c(3,6,9)]
#通过列名称提取
mtcars[,c("mpg","hp")]
#通过$符号提取
mtcars$hp
## [1] 110 110 93 110 175 105 245 62 95 123 123 180 180 180 205 215 230 66 52
## [20] 65 97 150 150 245 175 66 91 113 264 175 335 109
mtcars[,c("mpg")]
## [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
## [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
## [31] 15.0 21.4
mtcars[,c("mpg"),drop=FALSE]
#筛选, 产生逻辑向量进行筛选
coln<-colnames(mtcars)
interestCol<-colnames(mtcars)%in%c("hp","wt")
interestCol
## [1] FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
mtcars[,interestCol]
#mtcars[interestCol]
mtcars$hp>100
## [1] TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
## [13] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
## [25] TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
mtcars[mtcars$hp>100,]
mtcars$hp>100 & mtcars$cyl >6
## [1] FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE
## [13] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
## [25] TRUE FALSE FALSE FALSE TRUE FALSE TRUE FALSE
mtcars[mtcars$hp>100 & mtcars$cyl >6,]
#subset 方法
subset(mtcars,hp>100 & cyl>6)
#数据排序
#order 产生一个排序后的索引
orderIndex<-order(mtcars[,1])
orderIndex
## [1] 15 16 24 7 17 31 14 23 22 29 12 13 11 6 5 10 25 30 1 2 4 32 21 3 9
## [26] 8 27 26 19 28 18 20
mtcars[orderIndex,]
orderIndex<-order(mtcars[,1],decreasing = TRUE)
orderIndex
## [1] 20 18 19 28 26 27 8 3 9 21 4 32 1 2 30 10 25 5 6 11 13 12 29 22 14
## [26] 23 31 17 7 24 15 16
mtcars[orderIndex,]
mtcars[order(mtcars[,1],decreasing = TRUE),]
作业:筛选出mtcars 数据框中gear=4 或者 gear =3 的数据,最后按照mpg从大到小排序,赋值到一个新的变量中存储。
作业答案:
res<-mtcars[ mtcars$gear==3 | mtcars$gear==4, ]
res
orderIndex<-order(res[,1],decreasing = TRUE)
orderIndex
## [1] 20 18 19 26 8 3 9 21 4 27 1 2 10 25 5 6 11 13 12 22 14 23 17 7 24
## [26] 15 16
res[orderIndex,]
res1<-res[orderIndex,]
列表的创建用list()
a<-c(1,4,2,2)
b<-matrix(1:12,nrow=2,ncol=6)
c<-mtcars
mylist<-list(a,b,c)
mylist
## [[1]]
## [1] 1 4 2 2
##
## [[2]]
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 3 5 7 9 11
## [2,] 2 4 6 8 10 12
##
## [[3]]
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
#列表元素添加或修改name
names(mylist)
## NULL
names(mylist)<-c("a","b","c")
names(mylist)
## [1] "a" "b" "c"
#列表元素获取,索引或者name
mylist[1]
## $a
## [1] 1 4 2 2
mylist["a"]
## $a
## [1] 1 4 2 2
mylist[[1]]
## [1] 1 4 2 2
mylist[["a"]]
## [1] 1 4 2 2
mylist[["c"]]
mylist["c"]
## $c
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
数据的读入与输出read.table和write.table
#设置工作路径
setwd("~/single-cell/单细胞高级分析/01.start_R") #linux
#setwd("D:\\单细胞高级分析\\01.start_R") #windows
#数据路径的设置,目录之间分隔linux可以用 / , windows可以用 \\
#header 是否把第一行读成表头
#sep 设置数据列的分隔符,常见有\t , 等
#comment.char 指定注释行符号,行的开头含有这个符号,会忽略这一行;
#check.names 检查数据的有效性,通常检查列名,默认开启,-会变成 .
#row.names 把第一列读成行名
myfpkm<-read.table("data/All_gene_fpkm.txt",header=TRUE,comment.char="",sep = "\t",check.names=FALSE,row.names=1,stringsAsFactors=FALSE)
head(myfpkm)
#一些特殊的数据读入方法
#read.csv(),read.delim()
#myfpkm<- read.csv("data/All_gene_fpkm.csv",header=TRUE,comment.char="")
#######################修改列名###############################
#rownames(myfpkm) #查看行名
#colnames(myfpkm) #查看列名
colnames(myfpkm)<-c("x1", "x2" ,"x3" ,"z1" ,"z2" ,"z3" )
colnames(myfpkm)
## [1] "x1" "x2" "x3" "z1" "z2" "z3"
head(myfpkm)
#rowSums(myfpkm) #行求和
#colSums(myfpkm) #列求和
#rowMeans(myfpkm) #行平均值
#colMeans(myfpkm) #列平均值
#str(myfpkm) #列数据类型
########将新数据添加到数据框中################################################
myfpkm$sum<-rowSums(myfpkm)
head(myfpkm)
ncol(myfpkm)
## [1] 7
#删除列
myfpkm<-myfpkm[,-7]
head(myfpkm)
## 数据的写出
#筛选数据,筛选高表达基因,更多数据筛选方法可参考:http://www.omicsclass.com/article/83
myfpkm<-myfpkm[rowSums(myfpkm)>1,]
nrow(myfpkm)
## [1] 7967
getwd()
## [1] "/home/us001/single-cell/单细胞高级分析/01.start_R"
write.table(myfpkm,file = "filtered_fpkm.txt",quote = FALSE,sep = "\t")
#&、|、&&、|| 逻辑判断
#注意:运算符“逻辑与”和“逻辑或”存在两种形式,“&”和“|”作用在对象中的每一个元素上并且返回和比较次数相等长度的逻辑值;
#“&&”和“||”只作用在对象的第一个元素上。
T & F
## [1] FALSE
F || T
## [1] TRUE
a <- c(T,T,T)
b <- c(T,F,T)
a&b
## [1] TRUE FALSE TRUE
a|b
## [1] TRUE TRUE TRUE
a&&b
## Warning in a && b: 'length(x) = 3 > 1' in coercion to 'logical(1)'
## Warning in a && b: 'length(x) = 3 > 1' in coercion to 'logical(1)'
## [1] TRUE
a||b
## Warning in a || b: 'length(x) = 3 > 1' in coercion to 'logical(1)'
## [1] TRUE
mtcars$hp >100
## [1] TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
## [13] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
## [25] TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
mtcars$mpg<20
## [1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
## [13] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
## [25] TRUE FALSE FALSE FALSE TRUE TRUE TRUE FALSE
mtcars$hp >100 & mtcars$mpg<20
## [1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
## [13] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
## [25] TRUE FALSE FALSE FALSE TRUE TRUE TRUE FALSE
mtcars[mtcars$hp >100 & mtcars$mpg<20,]
x<-c(12,44,2,424,42,232)
mean(x)
## [1] 126
sum(x)
## [1] 756
range(x)
## [1] 2 424
max(x)
## [1] 424
min(x)
## [1] 2
var(x) #方差
## [1] 28438.4
sd(x) #标准差
## [1] 168.6369
#数据NA 缺失值处理方法
x<-c(12,44,2,NA,42,232)
mean(x,na.rm=TRUE)
## [1] 66.4
sum(x,na.rm=TRUE)
## [1] 332
range(x,na.rm=TRUE)
## [1] 2 232
max(x,na.rm=TRUE)
## [1] 232
min(x,na.rm=TRUE)
## [1] 2
var(x,na.rm=TRUE) #方差
## [1] 8906.8
sd(x,na.rm=TRUE) #标准差
## [1] 94.37584
sessionInfo()
## R version 4.2.2 (2022-10-31)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Rocky Linux 9.2 (Blue Onyx)
##
## Matrix products: default
## BLAS: /share/biosoft/R/R-v4.2.2/lib64/R/lib/libRblas.so
## LAPACK: /share/biosoft/R/R-v4.2.2/lib64/R/lib/libRlapack.so
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] ggplot2_3.5.0.9000
##
## loaded via a namespace (and not attached):
## [1] rstudioapi_0.15.0 magrittr_2.0.3 knitr_1.45 tidyselect_1.2.0
## [5] munsell_0.5.0 colorspace_2.1-0 R6_2.5.1 rlang_1.1.2
## [9] fastmap_1.1.1 fansi_1.0.6 dplyr_1.1.4 tools_4.2.2
## [13] grid_4.2.2 gtable_0.3.4 xfun_0.41 utf8_1.2.4
## [17] cli_3.6.2 withr_2.5.2 jquerylib_0.1.4 htmltools_0.5.7
## [21] yaml_2.3.8 digest_0.6.33 tibble_3.2.1 lifecycle_1.0.4
## [25] sass_0.4.8 vctrs_0.6.5 glue_1.6.2 cachem_1.0.8
## [29] evaluate_0.23 rmarkdown_2.25 pillar_1.9.0 compiler_4.2.2
## [33] bslib_0.6.1 generics_0.1.3 scales_1.3.0 jsonlite_1.8.8
## [37] pkgconfig_2.0.3