`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
包的核心工具,可以帮助你高效地进行数据转换和操作。