2020-04-08
今天的内容是学习R包(多个函数的集合),以dplyr为例。
一、配置Rstudio的下载镜像
CRAN的镜像没办法用来下载Bioconductor的包,为了保证我们可以自定义CRAN和Bioconductor的下载镜像,可以在Rstudio中通过两行代码进行设置。参考文章:你还在每次配置Rstudio的下载镜像吗?中的介绍,发现使用两行代码配置好下载镜像后,再次打开Rstudio设置的国内镜像就不存在了,还需重新进行配置。
那么,就需要进入高级模式:需要用到R的配置文件
.Rprofile
这里需要科普Rstudio最重要的两个配置文件:在刚开始运行Rstudio的时候,程序会查看许多配置内容,其中一个就是.Renviron,它是为了设置R的环境变量;而.Rprofile就是一个代码文件,如果启动时找到这个文件,那么就替我们先运行一遍(这个过程就是在启动Rstudio时完成的)。
file.edit('~/.Rprofile') #编辑文件
options("repos" =c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/")) #对应清华源
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/") #对应中科大源,当然其他地区的镜像也可以
最后,保存、重启Rstudio、再运行options()$repos
和options()$BioC_mirror
即可发线还是我们配置的国内镜像,无需再次进行。
二、安装R包
重要!!! 确保联网操作!
R包的安装命令:
包存在于CRAN网站:install.packages("包")
包存在于Bioconductor网站:BiocManager::install("包")
以下载dplyr包为例,安装过程中并不是一帆风顺,出现了提示:有二进制版本,但源代码是后来的,是否要从源代码安装需要编译的包,回答no如何知道包存在于哪里?----谷歌搜索吖。
花花:“学R语言要高冷,能拒绝就拒绝。”
三、加载R包
library(包)
或者require(包)
均可
四、dplyr五个基础函数学习
示例数据使用内置数据集iris的简化版,选取iris中1-2行,51-52行,101-102行的元素。
test <- iris[c(1:2,51:52,101:102),]
R语言内置了许多著名的数据集,iris是其中的一种,中文名是鸢尾花,有四个属性,分别是Sepal.Length(花萼长度),Sepal.Width(花萼宽度),Petal.Length(花瓣长度),Petal.Width(花瓣宽度),以及一个类别标签Species。
-
新增列:
mutate()
mutate(test, 新增的列名 = 新增的内容)
-
按列筛选:
select()
selsect(test, 列号或者列名)
-
筛选行:
filter()
filter(test,Species=="setosa")
某一列名加上限制条件 -
按某一列或某几列对表格进行排序:
arrange()
arrange(test, Sepal.Length) #默认按照这一列从小到大排序
arrange(test, desc(Sepal.Length)) #按照这一列从大到小排序
-
汇总:
summarise()
结合group_by进行分组,实用性更强
group_by(test, Species) #按照Species分组
summarise(test, mean(Sepal.Length), sd(Sepal.Length)) #计算Sepal.Length的平均值和标准差
summarise(group_by(test, Species),mean(Sepal.Length), sd(Sepal.Length)) #先按照Species分组,计算每组Sepal.Length的平均值和标准差
五、dplyr两个实用技能
- ** 管道操作 %>% (快捷键:cmd/ctr + shift + M)**
内涵:将左边的值管道输出为右边调用的函数的第一个参数。
test %>% group_by(Species) %>% summarise(mean(Sepal.Length), sd(Sepal.Length))
#把按照Species分组的结果给后面summarise命令使用 -
统计某列的unique值
count()
count(test,Species) #统计Species列中每项的重复数
六、dplyr处理关系数据
首先创建两个数据框,test1和test2将2个表进行连接,注意不要引入factor
-
取交集:内连
inner_join()
inner_join(test1, test2, by = "x") #取两个表中x的交集,连在一起
-
左连:
left_join()
left_join(test1, test2, by = 'x') #以test1的x为基准将2个表连起来
left_join(test2, test1, by = 'x') #以test1的x为基准将2个表连起来
-
全连:
full_join()
full_join( test1, test2, by = 'x')
-
半连接:
semi_join #返回能够与y表匹配的x表所有记录
semi_join(x = test1, y = test2, by = 'x') #
-
反连接:
anti_join() #返回无法与y表匹配的x表所有记录
anti_join(x = test2, y = test1, by = 'x') #返回test2中x与test1中无法匹配的内容
- *简单合并
注意,bind_rows()函数需要两个表格列数相同,而bind_cols()函数则需要两个数据框有相同的行数。
首先建立三个数据框test1、test2、test3,其中test1与test2有相同的列数,test1与test3有相同的行数。
今天的内容有点多,脑袋懵懵的......是一堆需要经常用才会记住的内容了~