DataScienceR数据清洗实战:dplyr包完整教程与技巧
DataScienceR是一个精心策划的R教程项目,专注于数据科学、自然语言处理和机器学习领域。其中,dplyr包作为数据清洗与转换的核心工具,为数据科学家提供了简洁高效的数据操作能力。本教程将带你掌握dplyr包的完整使用方法与实用技巧,轻松应对各种数据清洗挑战。## 为什么选择dplyr进行数据清洗?dplyr包是R语言中用于数据操作的强大工具,它具有以下优势:* **直观易用**
DataScienceR数据清洗实战:dplyr包完整教程与技巧
DataScienceR是一个精心策划的R教程项目,专注于数据科学、自然语言处理和机器学习领域。其中,dplyr包作为数据清洗与转换的核心工具,为数据科学家提供了简洁高效的数据操作能力。本教程将带你掌握dplyr包的完整使用方法与实用技巧,轻松应对各种数据清洗挑战。
为什么选择dplyr进行数据清洗?
dplyr包是R语言中用于数据操作的强大工具,它具有以下优势:
- 直观易用:语法简洁明了,易于学习和记忆
- 高效快速:针对数据框操作进行了优化,处理速度快
- 功能全面:提供了数据筛选、选择、排序、转换和汇总等完整功能
- 兼容性好:可与数据库和数据表格无缝对接
dplyr核心功能概览
dplyr包的核心功能围绕五个基本动词展开:
- filter:根据条件筛选行
- select:选择特定列
- arrange:排序数据行
- mutate:添加新变量
- summarise:数据汇总(通常与group_by一起使用)
此外,dplyr还提供了数据连接、窗口函数等高级功能,满足复杂数据处理需求。
快速上手:安装与加载dplyr
要开始使用dplyr,首先需要安装并加载该包。在R环境中执行以下命令:
# 安装dplyr包
install.packages("dplyr")
# 加载dplyr包
library(dplyr)
数据准备:认识tbl_df数据结构
dplyr引入了tbl_df(表格数据框)数据结构,它是对传统数据框的改进,具有更好的打印效果。我们可以使用tbl_df()函数将普通数据框转换为tbl_df:
# 将数据框转换为tbl_df
flights <- tbl_df(hflights)
# 查看数据
flights
使用tbl_df的好处是,当你打印数据时,它只会显示前10行和适合屏幕宽度的列数,避免了大量数据淹没控制台的问题。
实战技巧1:filter函数筛选数据行
filter函数用于根据条件筛选数据行,语法简洁直观:
# 筛选1月1日的航班
filter(flights, Month == 1, DayofMonth == 1)
# 筛选AA或UA航空公司的航班
filter(flights, UniqueCarrier %in% c("AA", "UA"))
相比传统的R子集选择方法,filter函数不需要重复数据框名称,使代码更加简洁易读。
实战技巧2:select函数选择数据列
select函数用于选择需要的列,可以通过列名、列范围或特定模式来选择:
# 选择特定列
select(flights, DepTime, ArrTime, FlightNum)
# 选择连续列和包含特定关键词的列
select(flights, Year:DayofMonth, contains("Taxi"), contains("Delay"))
除了contains(),dplyr还提供了starts_with()、ends_with()和matches()等函数,方便按模式选择列。
实战技巧3:管道操作%>%提升代码可读性
管道操作符%>%是dplyr的一大特色,它允许你将多个操作连接起来,形成一个清晰的工作流:
# 使用管道操作筛选延误超过60分钟的航班
flights %>%
select(UniqueCarrier, DepDelay) %>%
filter(DepDelay > 60)
这种写法避免了嵌套函数,使代码更加直观,读起来就像自然语言一样。
实战技巧4:arrange函数排序数据
arrange函数用于对数据进行排序,默认是升序排列,使用desc()函数可以实现降序排列:
# 按起飞延误时间升序排列
flights %>%
select(UniqueCarrier, DepDelay) %>%
arrange(DepDelay)
# 按起飞延误时间降序排列
flights %>%
select(UniqueCarrier, DepDelay) %>%
arrange(desc(DepDelay))
实战技巧5:mutate函数添加新变量
mutate函数用于创建新变量,这些变量通常是现有变量的函数:
# 计算飞行速度(英里/小时)
flights %>%
select(Distance, AirTime) %>%
mutate(Speed = Distance / AirTime * 60)
# 将新变量添加到数据框中
flights <- flights %>% mutate(Speed = Distance / AirTime * 60)
实战技巧6:group_by与summarise实现数据汇总
group_by函数用于对数据进行分组,然后使用summarise函数对每个组进行汇总:
# 计算每个目的地的平均到达延误时间
flights %>%
group_by(Dest) %>%
summarise(avg_delay = mean(ArrDelay, na.rm = TRUE))
# 对多个列应用相同的汇总函数
flights %>%
group_by(UniqueCarrier) %>%
summarise_each(funs(mean), Cancelled, Diverted)
dplyr还提供了n()函数用于计数,n_distinct()函数用于计算唯一值的数量。
实战技巧7:窗口函数处理复杂统计
窗口函数是dplyr的高级功能,它可以对数据进行排名、偏移计算和累积统计等操作:
# 找出每个航空公司延误时间最长的两天
flights %>%
group_by(UniqueCarrier) %>%
select(Month, DayofMonth, DepDelay) %>%
top_n(2) %>%
arrange(UniqueCarrier, desc(DepDelay))
# 计算每个月航班数量的变化
flights %>%
group_by(Month) %>%
tally() %>%
mutate(change = n - lag(n))
实用工具函数
dplyr还提供了一些实用的工具函数,方便数据处理:
# 随机抽样5行数据
flights %>% sample_n(5)
# 查看数据结构
glimpse(flights)
数据清洗实战案例
以下是一个综合运用dplyr功能进行数据清洗的案例:
# 1. 选择相关列
# 2. 筛选非取消航班
# 3. 添加新变量(飞行速度和延误状态)
# 4. 按航空公司分组
# 5. 计算每个航空公司的平均速度和延误率
cleaned_data <- flights %>%
select(UniqueCarrier, Distance, AirTime, DepDelay) %>%
filter(Cancelled == 0) %>%
mutate(
Speed = Distance / AirTime * 60,
Delayed = ifelse(DepDelay > 15, "Yes", "No")
) %>%
group_by(UniqueCarrier) %>%
summarise(
avg_speed = mean(Speed, na.rm = TRUE),
delay_rate = mean(Delayed == "Yes", na.rm = TRUE)
)
# 查看清洗结果
cleaned_data
扩展学习资源
要深入学习dplyr,可以参考以下资源:
- Intro to dplyr/dplyr-tutorial.Rmd
- Intro to dplyr/2-single-table.R
- Intro to dplyr/3-pipelines.R
- Intro to dplyr/4-grouped-mutate.R
通过本教程,你已经掌握了dplyr包的核心功能和实用技巧。无论是数据筛选、转换还是汇总,dplyr都能让你的数据清洗工作变得更加高效和愉悦。开始使用dplyr处理你的数据科学项目吧!
更多推荐


所有评论(0)