R4DS项目中的数据转换技术详解
r4ds R for data science: a book 项目地址: https://gitcode.com/gh_mirrors/r4/r4ds
数据转换概述
在数据分析工作中,原始数据往往不会以最理想的形态呈现。数据转换是数据分析流程中不可或缺的一环,它使我们能够将原始数据塑造成更适合分析的形式。本文将基于R4DS项目中的数据处理理念,深入讲解如何使用dplyr包进行高效的数据转换操作。
准备工作
在开始数据转换之前,我们需要加载必要的R包和数据集:
library(nycflights13)
library(tidyverse)
这里我们使用nycflights13包中的flights数据集,它包含了2013年从纽约市出发的所有航班信息,共计336,776条记录。通过glimpse()函数可以快速查看数据结构和类型:
glimpse(flights)
行操作技术
数据筛选:filter()
filter()函数用于基于条件筛选行数据。它接受一个数据框和一系列逻辑条件,返回满足所有条件的行。
# 找出延误超过2小时起飞的航班
flights |>
filter(dep_delay > 120)
# 找出1月1日起飞的航班
flights |>
filter(month == 1 & day == 1)
# 使用%in%简化多条件筛选
flights |>
filter(month %in% c(1, 2))
常见错误包括:
- 使用=代替==进行相等比较
- 错误地编写"或"条件表达式
数据排序:arrange()
arrange()函数按指定列的值对行进行排序:
# 按起飞时间排序
flights |>
arrange(year, month, day, dep_time)
# 按延误时间降序排列
flights |>
arrange(desc(dep_delay))
去重处理:distinct()
distinct()用于查找数据中的唯一行:
# 查找唯一的出发地-目的地组合
flights |>
distinct(origin, dest)
# 保留其他列信息
flights |>
distinct(origin, dest, .keep_all = TRUE)
列操作技术
创建新列:mutate()
mutate()用于基于现有列创建新列:
flights |>
mutate(
gain = dep_delay - arr_delay,
speed = distance / air_time * 60,
.before = 1 # 将新列放在最前面
)
通过.keep参数可以控制保留哪些列:
- "used":只保留参与计算或新创建的列
- "unused":保留未使用的列
- "all":保留所有列(默认)
列选择:select()
select()用于选择特定的列:
# 按名称选择列
flights |>
select(year, month, day)
# 选择列范围
flights |>
select(year:day)
# 使用辅助函数选择
flights |>
select(starts_with("arr"), ends_with("time"))
# 选择时重命名列
flights |>
select(tail_num = tailnum)
列重命名:rename()
rename()可以在保留所有列的同时重命名特定列:
flights |>
rename(tail_num = tailnum)
列位置调整:relocate()
relocate()用于调整列的位置:
# 将time_hour和air_time移到前面
flights |>
relocate(time_hour, air_time)
# 将year到dep_time移到time_hour后面
flights |>
relocate(year:dep_time, .after = time_hour)
最佳实践建议
- 管道操作符(|>)可以显著提高代码可读性,建议合理使用
- 为重要的中间结果创建有意义的变量名
- 组合多个简单操作比编写复杂表达式更易于维护
- 注意数据类型对操作的影响
- 定期检查操作结果是否符合预期
通过掌握这些数据转换技术,您将能够高效地准备数据,为后续的分析和可视化打下坚实基础。记住,数据转换通常占数据分析工作的80%时间,投资于学习这些技能将获得长期回报。
r4ds R for data science: a book 项目地址: https://gitcode.com/gh_mirrors/r4/r4ds
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考