美文网首页R
R语言dplyr包处理数据2021.3.6

R语言dplyr包处理数据2021.3.6

作者: R语言_茶味先生 | 来源:发表于2021-03-07 11:32 被阅读0次

    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语言dplyr包处理数据2021.3.6

        本文链接:https://www.haomeiwen.com/subject/gsvsqltx.html