安装加载dplyr
options("repos" =c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/")) #清华源镜像
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/") #中科院镜像
install.packages("dplyr")#安装
library(dplyr)#运行
示例数据使用内置数据集iris的简化版:
test <- iris[c(1:2,51:52,101:102),]
dplyr五个基础函数
1.mutate()
新增列
mutate(test, new = Sepal.Length * Sepal.Width)
2.select()
按列筛选
(1)按列号筛选
例:
select(test,1)筛选第一列
select(test,c(1,5))筛选第1、5列
(2)按列名筛选
select(test,Sepal.Length) 按照列名筛选(该命令为筛选名为Sepal.Length的列)。若筛选多个列,列名之间用,隔开
3.filter()
筛选行
filter(test, Species == "setosa")筛选行名为setosa的行
filter(test, Species == "setosa"&Sepal.Length > 5 )筛选行名为setosa,且名为Sepal.Length的列中数据>5的行
filter(test, Species %in% c("setosa","versicolor"))筛选行名为setosa或versicolor的行
4.arrange()
按某1列或某几列对整个表格进行排序
arrange(test, Sepal.Length)以Sepal.Length列的数据大小对整个表格进行重新排序 默认从小到大排序
arrange(test, desc(Sepal.Length)) 用desc改为从大到小
summarise()
用于汇总
summarise(test, mean(Sepal.Length), sd(Sepal.Length)) 计算Sepal.Length的平均值和标准差
——mean:平均;sd:标准差
group_by(test, Species)
summarise(group_by(test, Species),mean(Sepal.Length), sd(Sepal.Length))
先按照Species分组,计算每组Sepal.Length的平均值和标准差
dplyr两个实用技能
1:管道操作
%>% (cmd/ctr + shift + M)
%>%来自dplyr包的管道函数,我们可以将其理解为车间里的流水线,经过前一步加工的产品才能进入后一步进一步加工,其作用是将前一步的结果直接传参给下一步的函数,从而省略了中间的赋值步骤,可以大量减少内存中的对象,节省内存。
符号%>%,这是管道操作,其意思是将%>%左边的对象传递给右边的函数。
test %>%
group_by(Species) %>%
summarise(mean(Sepal.Length), sd(Sepal.Length))
2:统计某列的unique值
count
count(test,Species)
用于统计每一个数据列独特值的个数
dplyr处理关系数据
1.合并成表格
options(stringsAsFactors = F)在读入数据时,遇到字符串之后,不将其转换为factors,仍然保留为字符串格式
例:
test1 <- data.frame(x = c('b','e','f','x'),
z = c("A","B","C",'D'),
stringsAsFactors = F)
test2 <- data.frame(x = c('a','b','c','d','e','f'),
y = c(1,2,3,4,5,6),
stringsAsFactors = F)
2.连接表格
①内连inner_join
例:
inner_join(test1, test2, by = "x")
以共同的名字为x的列中,数据相同的行结合成为一个表
②左连left_join
例:
left_join(test1, test2, by = 'x')
left_join(test2, test1, by = 'x')
哪个表格在前面,就以哪个表格的x列为基准连接表格
③全连full_join
例:
full_join( test1, test2, by = 'x')
④半连接:semi_join
例:
semi_join(x = test1, y = test2, by = 'x')
以x列为基准,与y表匹配的x表所有记录
⑤反连接:无法与y表匹配的x表的所有记录anti_join
例:
anti_join(x = test2, y = test1, by = 'x')
以x列为基准,无法与y表匹配的x表所有记录
⑥简单合并
bind_rows() 合并有相同列数的两个表格
即将另一个表格接在一个表格下面
bind_cols() 合并有相同行数的两个表格
即将另一个表格接在一个表格右边
表格名之间用,分隔
bind_rows(test1, test2)
bind_cols(test1, test3)