一、设置下载镜像
三种方法:
1.在RStudio手动设置,但只能设置CRAN的镜像
2.在每次安装R包之前,敲以下代码:
options("repos"=c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/")) #设置CRAN下载为清华镜像
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/") #设置bioconductor下载镜像为中科大
3.设置R的配置文件
敲file.edit("~/.Rprofile")
,打开如下界面:
输入:
options("repos"=c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")
保存,退出RStudio并重启,之后直接输入安装R包的代码,R会自动从这两个镜像点下载R包,无需另外设置
二、下载R包
注意包的来源是CRAN还是bioconductor,有些包来源于GitHub
install.packages("dplyr") #从CRAN下载dylyr包
BiocManager::install("clusterProfiler") #从bioconductor下载clusterProfiler包
三、加载R包
使用R包之前需先加载,有两种方法:
library() #如果加载的包没有安装,会提示没有安装,并停止执行
require() #如果加载的包没安装,返回False;如果已安装,返回True,并成功加载
四、dplyr包运用实例
1.新增列:mutata()
函数
> require(dplyr) #加载dplyr包
> a <- iris #取内置数据集iris
> mutate(a[1:5,],new=Petal.Length*Petal.Width) #新增一列new,为Petal.Length×Petal.Width
Sepal.Length Sepal.Width Petal.Length Petal.Width Species new
1 5.1 3.5 1.4 0.2 setosa 0.28
2 4.9 3.0 1.4 0.2 setosa 0.28
3 4.7 3.2 1.3 0.2 setosa 0.26
4 4.6 3.1 1.5 0.2 setosa 0.30
5 5.0 3.6 1.4 0.2 setosa 0.28
2.按列筛选:select()
函数
> select(a[1:6,],1) #取a的第1列前6行
Sepal.Length
1 5.1
2 4.9
3 4.7
4 4.6
5 5.0
6 5.4
> select(a[1:6,],c(2,5)) #取a的第2、5列前6行
Sepal.Width Species
1 3.5 setosa
2 3.0 setosa
3 3.2 setosa
4 3.1 setosa
5 3.6 setosa
6 3.9 setosa
> select(a[1:6,],Species) #取a Species这一列的前6行
Species
1 setosa
2 setosa
3 setosa
4 setosa
5 setosa
6 setosa
> b <- c("Species","Sepal.Length") #取Species和Sepal.Length这两列
> select(a[1:6,],one_of(b))
Species Sepal.Length
1 setosa 5.1
2 setosa 4.9
3 setosa 4.7
4 setosa 4.6
5 setosa 5.0
6 setosa 5.4
> select(a[1:6,],Species,Sepal.Length) #取Species和Sepal.Length这两列,同上
Species Sepal.Length
1 setosa 5.1
2 setosa 4.9
3 setosa 4.7
4 setosa 4.6
5 setosa 5.0
6 setosa 5.4
3.按行筛选:filter()
函数
> test <- iris[c(1:2,51:52,101:102),]
> filter(test,Species=="setosa") #选出test中含有setosa的行
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
> filter(test,Species=="setosa"&Sepal.Width>3&Sepal.Width<4) #选出test中含有setosa且Sepal.Width在3~4之间的行
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
> filter(test,Species %in% c("versicolor","virginica")) #选出test中含versicolor和virginica的行
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 7.0 3.2 4.7 1.4 versicolor
2 6.4 3.2 4.5 1.5 versicolor
3 6.3 3.3 6.0 2.5 virginica
4 5.8 2.7 5.1 1.9 virginica
4.按某(几)列对表格排序:arrange()
函数
> arrange(test,Petal.Width) #按Petal.Width列排序,默认升序
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 7.0 3.2 4.7 1.4 versicolor
4 6.4 3.2 4.5 1.5 versicolor
5 5.8 2.7 5.1 1.9 virginica
6 6.3 3.3 6.0 2.5 virginica
> arrange(test,desc(Petal.Width)) #按Petal.Width列降序排序
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 6.3 3.3 6.0 2.5 virginica
2 5.8 2.7 5.1 1.9 virginica
3 6.4 3.2 4.5 1.5 versicolor
4 7.0 3.2 4.7 1.4 versicolor
5 5.1 3.5 1.4 0.2 setosa
6 4.9 3.0 1.4 0.2 setosa
5.汇总:summarise()
函数
> summarise(test,mean(Petal.Length),sd(Petal.Length)) #求Petal.Length的均值和标准差
mean(Petal.Length) sd(Petal.Length)
1 3.85 1.966469
> summarise(group_by(test,Species),mean(Petal.Length),sd(Petal.Length)) #按Petal.Length分组,求Petal.Length的均值和标准差
# A tibble: 3 x 3
Species `mean(Petal.Length)` `sd(Petal.Length)`
<fct> <dbl> <dbl>
1 setosa 1.4 0
2 versicolor 4.6 0.141
3 virginica 5.55 0.636
6.管道操作:%>%
> test %>% #按Petal.Length分组,求Petal.Length的均值和标准差
+ group_by(Species) %>%
+ summarise(mean(Petal.Length),sd(Petal.Length))
# A tibble: 3 x 3
Species `mean(Petal.Length)` `sd(Petal.Length)`
<fct> <dbl> <dbl>
1 setosa 1.4 0
2 versicolor 4.6 0.141
3 virginica 5.55 0.636
7.统计元素个数:count()
函数
> count(a,Species) #统计Species列中各元素的个数
# A tibble: 3 x 2
Species n
<fct> <int>
1 setosa 50
2 versicolor 50
3 virginica 50
8.处理关系数据
8.1 内联,按某列取交集,合并两个表格:inner_join()
> df1 <- data.frame(x=c("a","b","c","d","e"),
+ y=1:5,
+ stringsAsFactors = F)
> df1
x y
1 a 1
2 b 2
3 c 3
4 d 4
5 e 5
> df2 <- data.frame(x=c("a","c","x"),
+ z=c("A","B","C"),
+ stringsAsFactors = F)
> df2
x z
1 a A
2 c B
3 x C
> inner_join(df1,df2,by="x") #按x列取交集,将df1和df2合并
x y z
1 a 1 A
2 c 3 B
8.2 左联,按其中一个数据框的列进行合并:left_join()
> left_join(df1,df2,by="x") #按df1的x列进行合并
x y z
1 a 1 A
2 b 2 <NA>
3 c 3 B
4 d 4 <NA>
5 e 5 <NA>
> left_join(df2,df1,by="x") #按df2的x列进行合并
x z y
1 a A 1
2 c B 3
3 x C NA
8.3 全联,按其中一列取并集,将两个数据框合并:full_join()
> full_join(df1,df2,by="x") #按x列取并集,合并df1和df2
x y z
1 a 1 A
2 b 2 <NA>
3 c 3 B
4 d 4 <NA>
5 e 5 <NA>
6 x NA C
8.4 半连接,按其中一列取交集,返回其中一个数据框:semi_join()
> semi_join(df1,df2,by="x") #按x列取交集,返回df1
x y
1 a 1
2 c 3
> semi_join(df2,df1,by="x") ##按x列取交集,返回df2
x z
1 a A
2 c B
8.5 反连接,返回无法匹配的数据框的值:anti_join()
> anti_join(df1,df2,by="x") #按x列,返回df1无法与df2匹配的值
x y
1 b 2
2 d 4
3 e 5
> anti_join(df2,df1,by="x") #按x列,返回df2无法与df1匹配的值
x z
1 x C
8.6 简单合并,按行或列合并:bind_rows()
和bind_cols()
> tf1 <- data.frame(x=1:4,y=c("a","b","c","d"),stringsAsFactors = F)
> tf1
x y
1 1 a
2 2 b
3 3 c
4 4 d
> tf2 <- data.frame(z=c("Alex","Bob","Cindy","David"))
> tf2
z
1 Alex
2 Bob
3 Cindy
4 David
> tf3 <- data.frame(x=5:6,y=c("500","600"))
> tf3
x y
1 5 500
2 6 600
> bind_cols(tf1,tf2) #按列合并,需行数相同
x y z
1 1 a Alex
2 2 b Bob
3 3 c Cindy
4 4 d David
> bind_rows(tf1,tf3) #按行合并,需列数相同
x y
1 1 a
2 2 b
3 3 c
4 4 d
5 5 500
6 6 600