阅读 62

R语言dplyr包处理数据2021.3.6

1. dplyr包安装与载入

install.packages("dplyr")
library(dplyr)

dplyr包含有很多函数,并且还在不断地被丰富。因为dplyr包中的函数太多,为了避免函数名称和其他包重复而造成歧义,我们通常采用dplyr::函数名来调用dplyr中的函数。

2. 对单个表格操作

这里以iris数据集为例介绍多种函数操作

2.1 筛选--filter函数

dplyr::filter(iris,Sepal.Length>7)#筛选出Sepal.Length大于7的行
图1 筛选结果

2.2 去除重复行--distinct函数

dplyr::distinct(rbind(iris[1:10,],iris[1:20,]))#取出前10行和前20行合并后去除重复行
图2 去除结果

2.3 取出任意行--slice函数

slice函数取出的数据不包含行名,旧版本如果想用slice取出包含行名的数据则可以使用mutate函数
l例如mtcars<-mutate(mtcars,names=rownames(mtcars)),但是新版本的包已经包含行名。

dplyr::slice(iris,10:16)#取出10到16行数据
图3 取出行数据

2.4 随机抽取n行数据--sample_n函数

dplyr::sample_n(iris,10)#随机抽取10行数据
图4 随机抽取10行数据

2.5 按比例随机选取数据--sample_frac函数

dplyr::sample_frac(iris,0.3)#按比例随机抽取数据,抽取原数据的30%
图5 按比例随机选取数据

2.6 对数据进行排序--arrange函数

desc是改变默认排序规则

dplyr::arrange(iris,Sepal.Length)#将Sepal.Length列进行从小到大排序
#dplyr::arrange(iris,desc(Sepal.Length))#方法一:将Sepal.Length列进行从大到小排序
#dplyr::arrange(iris,-Sepal.Length)#方法二:将Sepal.Length列进行从大到小排序
图6 将Sepal.Length列进行排序

2.7 对数据取子集--select函数

比R自带的subset函数更好用

2.8 对数据进行统计计算--summarise函数

dplyr::summarise(iris,avg=mean(Sepal.Length))#对Sepal.Length这一列进行平均数计算
dplyr::summarise(iris,sum=sum(Sepal.Length))#对Sepal.Length这一列进行求和计算

2.9 对数据进行分组--group_by函数

dplyr::group_by(iris,Species)#方法一:按属种不同将数据分为三组
#iris %>% group_by(Species)#方法二:按属种不同将数据分为三组
#iris %>% group_by(Species) %>% summarise(Sepal.Length.avg=mean(Sepal.Length))#用管道函数将分好组后的数据求出各组的Sepal.Length的平均值
#iris %>% group_by(Species) %>% summarise(Sepal.Length.avg=mean(Sepal.Length)) %>% arrange(-Sepal.Length.avg)#将平均值从大到小排序
图7 分组以及计算均值结果

图8 均值排序结果

2.10 添加新的列向量--mutate函数

dplyr::mutate(iris,new=Sepal.Length+Petal.Length)#将花萼和花瓣长度相加后的值赋值给new变量,并添加到数据框中
图9 添加新列

3. 链式操作符%>%

两个百分号中间夹着一个大于号,称为链式操作符,它功能是用于实现将一个函数的输出传递给下一个函数,作为下一个函数的输入。类似于Linux系统中的管道函数。在Rstudio中可以使用ctrl +shift+M快捷键输出出来。

head(mtcars,20) %>% tail(10)#先取出mtcars数据集中前20行,紧接着取这前20行数据的后10行

在dplyr中经常使用这个符号。

4. 对双表格操作

操作的内容主要就是将两个表格的内容进行整合

4.1 左连接(left_join),右连接(right_join),内连接(inner_join),全连接(full_join),反连接(semi_join)和半连接(anti_join)

a=data.frame(x1=c("A","B","C"),x2=c(1,2,3))
b=data.frame(x1=c("A","B","D"),x3=c(T,F,T))
dplyr::left_join(a,b,by="x1")
dplyr::right_join(a,b,by="x1")
dplyr::inner_join(a,b,by="x1")#取x1列的交集
dplyr::full_join(a,b,by="x1")#取x1列的并集
dplyr::semi_join(a,b,by="x1")#根据右侧表的内容对左侧表进行过滤,输出出a中与b的交集部分
dplyr::anti_join(a,b,by="x1")#根据右侧表的内容对左侧表进行过滤,输出出a中与b的补集部分

4.2 取交集(intersect),取并集(union_all),取非冗余的并集(union),取补集(setdiff)

first <- slice(mtcars,1:20)#取mtcars数据集前20行
second<-slice(mtcars,10:30)#取mtcars数据集第10到第30行
dplyr::intersect(first,second)#取两者交集
dplyr::union_all(first,second)#取两者并集,包含重复
dplyr::union(first,second)#取两者并集,去除重复
dplyr::setdiff(first,second)#取出first集合中去除与second交集的部分
图10 setdiff函数

作者:R语言_茶味先生

原文链接:https://www.jianshu.com/p/4a6f233a6a5f

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐