4.R语言【dplyr包】使用方法

b站课程视频链接:
https://www.bilibili.com/video/BV19x411X7C6?p=1
腾讯课堂(最新,但是要花钱,我花99😢😢元买了,感觉讲的没问题,就是知识点结构有点乱,有点废话):
https://ke.qq.com/course/3707827#term_id=103855009
 
本笔记前面的笔记参照b站视频,【后面的画图】参考了付费视频
笔记顺序做了些调整【个人感觉逻辑顺畅】,并删掉一些不重要的内容,以及补充了个人理解
系列笔记目录【持续更新】:https://blog.csdn.net/weixin_42214698/category_11393896.html

数据转换之dplyr包

dplyr包不仅可以对单个表格进行操作,也可以对双表格进行操作。 (使用R中的iris数据集做演示)

install.packages("dplyr")
library(dplyr)
# 列出该包的函数
ls("package:dplyr")

因为dplyr包有很多函数,为了防止dplyr包中的函数名与其他函数产生冲突,使用时前面加上“包名::”

1. 对单表格的操作

# 过滤函数  选出 Sepal.Length>7 的行
dplyr::filter(iris,Sepal.Length>7)

#去除重复  
# rbind是行合并     iris[1:10, ]是前10行,iris[1:15, ]是前15行   最终结果是只有前15行
dplyr::distinct(rbind(iris[1:10, ] , iris[1:15, ])) 

#slice是切片的意思,可以用于取出数据任意行
dplyr::slice(iris,10:15) 

#随机取样10行
dplyr::sample_n(iris,10) 
#按比例随机取样  0.1是比例
dplyr::sample_frac(iris,0.1) 


 #按照iris中的花萼长度Sepal.Length进行排序  
dplyr::arrange(iris,Sepal.Length)
#降序
dplyr::arrange(iris,desc(Sepal.Length)) 


#添加新的变量new,其值是Sepal.Length+Petal.Length
dplyr::mutate(iris,new=Sepal.Length+Petal.Length)




# 根据Species进行分组
> dplyr::group_by(iris,Species)
# A tibble: 150 × 5
# Groups:   Species [3]
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
 1          5.1         3.5          1.4         0.2 setosa 
 2          4.9         3            1.4         0.2 setosa 
 3          4.7         3.2          1.3         0.2 setosa 
 4          4.6         3.1          1.5         0.2 setosa 
 5          5           3.6          1.4         0.2 setosa 
 6          5.4         3.9          1.7         0.4 setosa 
 7          4.6         3.4          1.4         0.3 setosa 
 8          5           3.4          1.5         0.2 setosa 
 9          4.4         2.9          1.4         0.2 setosa 
10          4.9         3.1          1.5         0.1 setosa 
# … with 140 more rows
# ℹ Use `print(n = ...)` to see more rows

select函数:dplyr包中的数据框取子集功能,比R自带的subset函数更加强大。
在这里插入图片描述



2. dplyr包的统计函数

> summarise(iris,avg=mean(Sepal.Length))
       avg
1 5.843333
> summarise(iris,sum=sum(Sepal.Length))
    sum
1 876.5



3. 链式操作符 ——“%>% ”

它的功能是用于实现将一个函数的输出传递给下一个函数,作为下一个函数的输入。
在RStudio中可以使用ctrl+shift+M快捷键输出来。

#输出mtcars中的第10到20行
head(mtcars,20) %>% tail(10) 

对iris数据集先进行分组,再求平均,最后排序
> iris %>% group_by(Species)
# A tibble: 150 × 5
# Groups:   Species [3]
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
 1          5.1         3.5          1.4         0.2 setosa 
 2          4.9         3            1.4         0.2 setosa 
 3          4.7         3.2          1.3         0.2 setosa 
 4          4.6         3.1          1.5         0.2 setosa 
 5          5           3.6          1.4         0.2 setosa 
 6          5.4         3.9          1.7         0.4 setosa 
 7          4.6         3.4          1.4         0.3 setosa 
 8          5           3.4          1.5         0.2 setosa 
 9          4.4         2.9          1.4         0.2 setosa 
10          4.9         3.1          1.5         0.1 setosa 
# … with 140 more rows
# ℹ Use `print(n = ...)` to see more rows
> iris %>% group_by(Species) %>% summarise(avg=mean(Sepal.Width))
# A tibble: 3 × 2
  Species      avg
  <fct>      <dbl>
1 setosa      3.43
2 versicolor  2.77
3 virginica   2.97
> iris %>% group_by(Species) %>% summarise(avg=mean(Sepal.Width)) %>%arrange(avg) 
# A tibble: 3 × 2
  Species      avg
  <fct>      <dbl>
1 versicolor  2.77
2 virginica   2.97
3 setosa      3.43



4. 对双表格的操作

1)左连接 (以左表为基表)
dplyr::left_join(a,b,by=“x1”)
在这里插入图片描述

2)右连接 (以右表为基表)
dplyr::right_join(a,b,by=“x1”)
在这里插入图片描述

3)内连接:取x1的交集
dplyr::inner_join(a,b,by=“x1”)

在这里插入图片描述

4)全连接:取x1的并集
在这里插入图片描述

5)半连接:a与b的交集,把b中有的,a中没有的(即x3列)去掉
dplyr::semi_join(a,b,by=“x1”)
在这里插入图片描述

6)反连接:a与b的补集,保留a中有,而b中没有的观测
dplyr::anti_join(a,b,by=“x1”)

在这里插入图片描述



5.数据集的集合运算

# 前20行
first <- slice(mtcars,1:20)  
# 第10~30行
second <- slice(mtcars,10:30)  

1)取数据集交集:intersect(first,second)  
2)取数据集并集:dplyr::union_all(first,second)  
3)取非冗余的数据集并集:  dplyr::union(first,second)  
4)取first的补集:setdiff(first,second)
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你说的白是什么白_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值