R for Data Science(3)
- R for Data Science
- 以下是关于网页内容的详细笔记:
1. 章节概览
- 章节主题:数据转换(Data Transformation)
- 核心内容:介绍如何使用 R 中的
dplyr
包进行数据转换,包括对数据框的行、列和组的操作,以及管道操作符的使用。
2. 数据转换基础
- dplyr 包:是 tidyverse 的核心成员之一,提供了用于数据转换的工具。
- nycflights13 数据集:包含 2013 年从纽约市出发的所有航班信息,用于示例分析。
- Tibble:一种特殊的数据框,专为大型数据集设计,仅显示部分行和列。
3. 行操作
3.1 filter()
函数
- 功能:根据条件筛选行。
- 示例:
- 筛选起飞时间晚点超过 120 分钟的航班:
flights |>filter(dep_delay > 120)
- 筛选特定月份或日期的航班:
flights |>filter(month == 1 & day == 1)
- 筛选起飞时间晚点超过 120 分钟的航班:
- 常见错误:使用
=
而不是==
,或者错误地使用逻辑运算符。
3.2 arrange()
函数
- 功能:根据列的值对行进行排序。
- 示例:
- 按起飞时间排序:
flights |>arrange(year, month, day, dep_time)
- 按延迟时间降序排序:
flights |>arrange(desc(dep_delay))
- 按起飞时间排序:
3.3 distinct()
函数
- 功能:查找唯一行或唯一组合。
- 示例:
- 删除重复行:
flights |>distinct()
- 查找唯一的出发地和目的地组合:
flights |>distinct(origin, dest)
- 删除重复行:
4. 列操作
4.1 mutate()
函数
- 功能:创建新列或修改现有列。
- 示例:
- 计算延迟时间的增益和飞行速度:
flights |>mutate(gain = dep_delay - arr_delay,speed = distance / air_time * 60)
- 计算延迟时间的增益和飞行速度:
4.2 select()
函数
- 功能:选择特定的列。
- 示例:
- 选择特定列:
flights |>select(year, month, day)
- 使用范围选择:
flights |>select(year:day)
- 选择特定列:
4.3 rename()
函数
- 功能:重命名列。
- 示例:
- 重命名列:
flights |>rename(tail_num = tailnum)
- 重命名列:
4.4 relocate()
函数
- 功能:重新排列列的顺序。
- 示例:
- 将列移动到前面:
flights |>relocate(time_hour, air_time)
- 将列移动到前面:
5. 组操作
5.1 group_by()
函数
- 功能:按一个或多个变量分组。
- 示例:
- 按月份分组:
flights |>group_by(month)
- 按月份分组:
5.2 summarize()
函数
- 功能:对分组数据进行汇总。
- 示例:
- 计算每个月的平均延迟时间:
flights |>group_by(month) |>summarize(avg_delay = mean(dep_delay, na.rm = TRUE))
- 计算每个月的平均延迟时间:
5.3 slice_*()
函数
- 功能:提取每个组中的特定行。
- 示例:
- 提取每个目的地延迟时间最长的航班:
flights |>group_by(dest) |>slice_max(arr_delay, n = 1)
- 提取每个目的地延迟时间最长的航班:
6. 管道操作符
- 功能:将多个操作组合在一起,使代码更简洁。
- 示例:
- 使用管道找到最快的航班:
flights |>filter(dest == "IAH") |>mutate(speed = distance / air_time * 60) |>select(year:day, dep_time, carrier, flight, speed) |>arrange(desc(speed))
- 使用管道找到最快的航班:
7. 案例研究
- 内容:使用棒球数据集(Lahman 包)分析击球手的表现。
- 示例:
- 计算击球手的击球平均数和击球次数:
batters <- Lahman::Batting |>group_by(playerID) |>summarize(performance = sum(H, na.rm = TRUE) / sum(AB, na.rm = TRUE),n = sum(AB, na.rm = TRUE))
- 计算击球手的击球平均数和击球次数:
8. 总结
- 重点:介绍了
dplyr
包中用于操作数据框的工具,包括行操作、列操作和组操作。 - 下一步:深入学习特定类型数据的转换方法(如数字、字符串、日期等)。