dplyr
是R语言中一个功能强大且流行的数据操作包,它提供了一系列用于数据清洗、转换、汇总和可视化的工具。这些工具包括选择列、过滤行、排序、添加或修改列、汇总数据以及分组和合并数据集的函数。dplyr
的设计使得数据操作变得简单直观,同时保持高性能,并且支持与外部数据库的连接、懒惰数据操作以及窗口函数。此外,dplyr
鼓励使用整洁数据的原则,并与其他R语言包(如tidyr
、ggplot2
等)有很好的集成,形成一个完整的数据分析工作流。
dplyr常用函数与用法
函数 | 用途 |
---|---|
select() |
选择数据集中的列 |
filter() |
基于条件过滤行 |
arrange() |
对数据集进行排序 |
mutate() |
添加新列或修改现有列 |
summarise() |
计算汇总统计量,减少到每组的单一行 |
group_by() |
将数据集分组,以便进行分组操作 |
ungroup() |
移除数据集的分组信息 |
distinct() |
删除重复行,保留唯一值 |
inner_join() |
根据两个数据集的共同列进行内连接 |
left_join() |
根据左数据集的键和右数据集的键进行左连接 |
right_join() |
根据右数据集的键和左数据集的键进行右连接 |
full_join() |
根据两个数据集的键进行全连接 |
semi_join() |
返回左数据集在右数据集中有匹配的记录 |
anti_join() |
返回左数据集中不在右数据集中的记录 |
函数使用示例
这里先导入dplyr
包,随后新建两个data.feame
数据集用于后续操作,一个数据框用于存储学生信息,一个数据框用于存储专业课成绩
r
library(dplyr)
students <- data.frame(
student_id = c(1, 2, 3, 4, 5),
name = c("GGBond", "FeiFei", "DickDai", "SuperFuckMan", "TeacherMihu"),
age = c(16, 17, 15, 23, 42)
)
courses <- data.frame(
course_id = c(101, 102, 103, 104, 105),
course_name = c("Math", "Science", "History", "Math", "Art"),
student_id = c(1, 2, 3, 1, 4)
)

使用select()
函数选择数据集中的列
r
selected_students <- students %>% select(name, age)
selected_students

使用filter()
函数基于条件过滤行
r
filtered_students <- students %>% filter(age > 21)
filtered_students

使用arrange()
函数对数据集进行排序
r
arranged_students <- students %>% arrange(desc(age))
arranged_students

使用mutate()
函数添加新列或修改现有列
r
mutated_students <- students %>% mutate(is_adult = age >= 21)
mutated_students

使用summarise()
函数计算汇总统计量,减少到每组的单一行
r
summarised_students <- students %>% summarise(avg_age = mean(age))
summarised_students

使用group_by()
和 ungroup()
函数将数据集分组,以便进行分组操作,然后移除分组信息
r
grouped_students <- students %>% group_by(age) %>% summarise(count = n())
grouped_students

移除分组信息
r
ungrouped_students <- grouped_students %>% ungroup()
ungrouped_students

使用distinct()
函数删除重复行,保留唯一值
r
distinct_courses <- courses %>% distinct(course_name)
distinct_courses

使用inner_join()
函数根据两个数据集的共同列进行内连接
r
inner_joined <- inner_join(students, courses, by = "student_id")
inner_joined

使用left_join()
函数根据左数据集的键和右数据集的键进行左连接
r
left_joined <- left_join(students, courses, by = "student_id")
left_joined

使用right_join()
函数根据右数据集的键和左数据集的键进行右连接
r
right_joined <- right_join(students, courses, by = "student_id")
right_joined

使用full_join()
函数根据两个数据集的键进行全连接
r
full_joined <- full_join(students, courses, by = "student_id")
full_joined

使用semi_join()
返回左数据集在右数据集中有匹配的记录
r
semi_joined <- semi_join(students, courses, by = "student_id")
print(semi_joined)

使用anti_join()
返回左数据集中不在右数据集中的记录
r
anti_joined <- anti_join(students, courses, by = "student_id")
print(anti_joined)
distinct_courses <- courses %>% distinct(course_name)
distinct_courses
