
操作数据
利用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")
- 多情况筛选
类似SQL中 in 的用法,或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()函数实现该功能,与SQL中group by ···类似
summarise
按照分组聚合汇总
starwars %>%
group_by(species) %>%
summarise(
n = n(),
mass = mean(mass, na.rm = TRUE)
)详情请浏览我的博客:http://www.zhongyufei.com/ ,其中R Study 部分会不定期更新R语言相关文章
本文介绍了R语言中dplyr包的基础用法,包括filter用于筛选数据,select用于选择特定列,rename用于重命名列,relocate调整列顺序,mutate增加新变量,arrange进行排序,group_by进行分组及summarise进行汇总。这些函数帮助简化数据处理,提高代码可读性和复用性。
1737

被折叠的 条评论
为什么被折叠?



