DataScienceR数据清洗实战:dplyr包完整教程与技巧

【免费下载链接】DataScienceR a curated list of R tutorials for Data Science, NLP and Machine Learning 【免费下载链接】DataScienceR 项目地址: https://gitcode.com/gh_mirrors/da/DataScienceR

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,可以参考以下资源:

通过本教程,你已经掌握了dplyr包的核心功能和实用技巧。无论是数据筛选、转换还是汇总,dplyr都能让你的数据清洗工作变得更加高效和愉悦。开始使用dplyr处理你的数据科学项目吧!

【免费下载链接】DataScienceR a curated list of R tutorials for Data Science, NLP and Machine Learning 【免费下载链接】DataScienceR 项目地址: https://gitcode.com/gh_mirrors/da/DataScienceR

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐