`tidyverse` 中涉及的函数及其用法
1. filter():根据条件筛选行
filter() 函数用于根据逻辑条件保留数据框中的行。
- 基本语法:
filter(.data, condition).data:要筛选的数据框。condition:逻辑条件,可以是逻辑运算符(如>、<、==等)组合。
- 示例:
# 筛选起飞延误超过120分钟的航班 flights %>%filter(dep_delay > 120) # 筛选1月1日的航班 flights %>%filter(month == 1 & day == 1) # 筛选1月或2月的航班 flights %>%filter(month %in% c(1, 2))
2. select():选择列
select() 函数用于按名称、范围或条件选择数据框中的列。
- 基本语法:
select(.data, ...).data:要选择列的数据框。...:要选择的列名,可以使用列名、范围(如year:day)或条件(如!year:day)。
- 示例:
# 选择指定列 flights %>%select(year, month, day) # 选择范围内的列 flights %>%select(year:day) # 排除指定列 flights %>%select(!year:day) # 选择特定类型的列 flights %>%select(where(is.character))
3. mutate():添加新列
mutate() 函数用于基于现有列创建新列,支持数学计算。
- 基本语法:
mutate(.data, name = value, ...).data:要处理的数据框。name = value:新列的名称和值,值可以是基于现有列的计算表达式。
- 示例:
# 计算延误时间差和飞行速度 flights %>%mutate(gain = dep_delay - arr_delay, speed = distance / air_time * 60) # 控制新列位置 flights %>%mutate(speed = distance / air_time * 60, .before = 1)
4. arrange():根据列值排序行
arrange() 函数用于按一个或多个列的值对数据框进行排序。
- 基本语法:
arrange(.data, ...).data:要排序的数据框。...:要排序的列名,可以使用desc()函数进行降序排序。
- 示例:
# 按年、月、日、出发时间排序 flights %>%arrange(year, month, day, dep_time) # 按延误时间降序排序 flights %>%arrange(desc(dep_delay))
5. distinct():查找唯一行
distinct() 函数用于去除重复行,可指定列名以查找特定列的唯一组合。
- 基本语法:
distinct(.data, ..., .keep_all = FALSE).data:要处理的数据框。...:要查找唯一组合的列名。.keep_all:是否保留其他列,默认为FALSE。
- 示例:
# 查找所有唯一的起点和终点组合 flights %>%distinct(origin, dest) # 保留其他列时查找唯一组合 flights %>%distinct(origin, dest, .keep_all = TRUE)
6. rename():重命名列
rename() 函数用于保留所有列,仅重命名指定列。
- 基本语法:
rename(.data, new_name = old_name, ...).data:要处理的数据框。new_name = old_name:新列名和旧列名的对应关系。
- 示例:
flights %>%rename(tail_num = tailnum)
7. relocate():移动列
relocate() 函数用于移动列的位置。
- 基本语法:
relocate(.data, ..., .before = NULL, .after = NULL).data:要处理的数据框。...:要移动的列名。.before或.after:指定移动到的位置。
- 示例:
# 将列移到前面 flights %>%relocate(time_hour, air_time) # 将列移到指定位置 flights %>%relocate(year:dep_time, .after = time_hour)
8. group_by():分组
group_by() 函数用于按一个或多个变量将数据集划分为组。
- 基本语法:
group_by(.data, ...).data:要分组的数据框。...:分组变量的列名。
- 示例:
flights %>%group_by(month) flights %>%group_by(year, month, day)
9. summarize():汇总
summarize() 函数用于对分组数据进行汇总计算。
- 基本语法:
summarize(.data, name = function(...), ...).data:要汇总的数据框。name = function(...):汇总计算的名称和函数。
- 示例:
# 计算每月的平均延误时间 flights %>%group_by(month) %>%summarize(avg_delay = mean(dep_delay, na.rm = TRUE)) # 计算每组的行数 flights %>%group_by(month) %>%summarize(n = n())
10. slice_*() 函数:提取特定行
slice_*() 函数用于从每个组中提取特定行。
- 基本语法:
slice_max(.data, order_by, n = 1, ...) slice_min(.data, order_by, n = 1, ...).data:要处理的数据框。order_by:排序的列名。n:提取的行数。
- 示例:
# 提取每个目的地最晚到达的航班 flights %>%group_by(dest) %>%slice_max(arr_delay, n = 1)
这些函数是 tidyverse 中 dplyr 包的核心工具,可以帮助你高效地进行数据转换和操作。
