r怎么筛选前100个数据_R语言-tidyverse系列之-dplyr-1-基础函数

本文介绍了R语言中dplyr包的基础用法,包括filter用于筛选数据,select用于选择特定列,rename用于重命名列,relocate调整列顺序,mutate增加新变量,arrange进行排序,group_by进行分组及summarise进行汇总。这些函数帮助简化数据处理,提高代码可读性和复用性。

9a86eb546850bdfb79fd2a118181ddc6.png

操作数据

利用R语言完成与Excel透视表sql语句的功能,将从条件筛选、排序、分组聚合等几个方面记录R的实现方式。

sql相比,用R实现相同功能的好处:

  • 代码量极大减少
  • 当逻辑复杂时,R可以按照顺序一步步实现,无需嵌套,实现过程简单
  • 该包就是从数据库相关操作中抽象而来,迁移成本低
  • 配合dbplyr包使用,大部分情况下可以扔掉sql语法,从而实现不同数据库间语法并不完全一致时,代码的重复使用性

前言

dplyr包是tidyverse系列中的核心包之一,dplyr包提供了一组一致的动词来解决最常见的数据处理难题:

  • mutate() 添加新变量,是现有变量得函数
  • select() 筛选列,根据现有变量名称选这变量
  • filter() 筛选行,根据条件筛选
  • summarise() 按照一定条件汇总聚合
  • arrange() 行排序

安装

## 最简单是的方式就是安装tidyverse
install.packages('tidyverse')
​
## 或者仅仅安装 tidyr:
install.packages('dplyr')
​
## 或者从github 安装开发版本
## install.packages("devtools")
devtools::install_github("tidyverse/dplyr")

基础用法

library(dplyr)

filter

  • 单条件筛选

类似Excel表格中筛选功能,筛选条件为species == "Droid"

starwars %>% 
  filter(species == "Droid")
  • 多条件

多条件筛选时,用逗号隔开条件

starwars %>% 
  filter(species == "Droid",skin_color == "gold")
​
# same above
# starwars %>% 
#   filter(species == "Droid" & skin_color == "white")
​
  • 多情况筛选

类似SQLin 的用法,或Excel中筛选条件时"或"条件

starwars %>% 
  filter(species %in%  c("Droid",'Clawdite'))
  • 逻辑值筛选

注意| ,&,!等逻辑判断符号 , |为 或, & 为并、且条件,!为非,灵活运用可以方便做条件筛选

library(nycflights13)
filter(flights, !(arr_delay > 120 | dep_delay > 120))
filter(flights, arr_delay <= 120, dep_delay <= 120)
# same above
filter(flights, arr_delay <= 120 & dep_delay <= 120)
# %in% 的反面
starwars %>% 
  filter(!species %in%  c("Droid",'Clawdite'))

select

当数据集较大列数较多时,我们可能并不需要那么多列,可以通过select()筛选:

  • 基础用法

通过指定列名称筛选,顺便指定列之间顺序

starwars %>% 
  select(name,height,mass,hair_color,skin_color,eye_color)
  • 列索引

通过列名或数字向量索引,但是不建议用列索引,避免原始数据列顺序变化后导致报错。

starwars %>% 
  select(name : eye_color)
#same above
starwars %>% 
  select(1:6)
# starwars %>% 
#   select(c(1,2,4,5,7))

rename

列重命名使用rename()函数,新名称写前面,如下所示:

starwars %>% rename(home_world = homeworld)
# 多列同换
starwars %>% rename(home_world = homeworld,skincolor = skin_color)

relocate

更改列顺序,与使用select()指定列顺序相似

# sex:homeworld列在height列前面
starwars %>% relocate(sex:homeworld, .before = height)

mutate

  • 新增计算列
starwars %>% 
  mutate(bmi = mass / ((height / 100)  ^ 2)) %>% 
  select(name:mass,bmi)
  • 新增计算列基础上新增列,
starwars %>% 
  mutate(bmi = mass / ((height / 100)  ^ 2),newbmi = bmi *2) %>% 
  select(name:mass,bmi,newbmi)
  • 删除列
starwars %>% mutate(height = NULL)

arrange

  • 单列排序,默认升序,通过desc()降序排列
starwars %>% 
  arrange(desc(mass))
  • 多列排序
starwars %>% 
  arrange(height,desc(mass))

group_by

在汇总前一般都需要分组聚合,group_by()函数实现该功能,与SQLgroup by ···类似

summarise

按照分组聚合汇总

starwars %>%
  group_by(species) %>%
  summarise(
    n = n(),
    mass = mean(mass, na.rm = TRUE)
  )

详情请浏览我的博客:http://www.zhongyufei.com/ ,其中R Study 部分会不定期更新R语言相关文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值