R for Data Science(3)

发布于:2025-05-18 ⋅ 阅读:(16) ⋅ 点赞:(0)

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)
      
  • 常见错误:使用 = 而不是 ==,或者错误地使用逻辑运算符。

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 包中用于操作数据框的工具,包括行操作、列操作和组操作。
  • 下一步:深入学习特定类型数据的转换方法(如数字、字符串、日期等)。

网站公告

今日签到

点亮在社区的每一天
去签到