📅  最后修改于: 2023-12-03 15:22:10.940000             🧑  作者: Mango
Dplyr 是 R 语言中一个热门的数据操纵包,它提供了一组功能强大且易于使用的函数,用于连接、筛选、排序、汇总和变换数据框。本文将介绍如何使用 dplyr 包连接 R 中的数据。
在开始之前,需要先安装 dplyr 包。可以通过以下命令在 R 中安装 dplyr 包:
install.packages("dplyr")
在 dplyr 中,有五种类型的连接:内连接、左连接、右连接、全连接和交叉连接。
内连接只返回链接两个数据框之间有匹配的行。可以使用 inner_join()
函数进行内连接。下面是一个内连接的例子:
library(dplyr)
# 创建一个员工数据框
employee <- data.frame(
id = c(1, 2, 3, 4, 5),
name = c("Tom", "Jerry", "Alice", "Bob", "Mike"),
age = c(29, 23, 33, 27, 26)
)
# 创建一个部门数据框
department <- data.frame(
id = c(1, 2, 3, 4),
name = c("HR", "IT", "Sales", "Marketing")
)
# 进行内连接
inner_join(employee, department, by = "id")
输出:
id name.x age name.y
1 1 Tom 29 HR
2 2 Jerry 23 IT
3 3 Alice 33 Sales
4 4 Bob 27 Marketing
左连接返回链接左边数据框中的所有行和右边数据框中匹配的行。可以使用 left_join()
函数进行左连接。下面是一个左连接的例子:
# 进行左连接
left_join(employee, department, by = "id")
输出:
id name.x age name.y
1 1 Tom 29 HR
2 2 Jerry 23 IT
3 3 Alice 33 Sales
4 4 Bob 27 Marketing
5 5 Mike 26 <NA>
右连接返回链接右边数据框中的所有行和左边数据框中匹配的行。可以使用 right_join()
函数进行右连接。下面是一个右连接的例子:
# 进行右连接
right_join(employee, department, by = "id")
输出:
id name.x age name.y
1 1 Tom 29 HR
2 2 Jerry 23 IT
3 3 Alice 33 Sales
4 4 Bob 27 Marketing
5 NA <NA> NA Marketing
全连接返回链接左边和右边数据框中的所有行。可以使用 full_join()
函数进行全连接。下面是一个全连接的例子:
# 进行全连接
full_join(employee, department, by = "id")
输出:
id name.x age name.y
1 1 Tom 29 HR
2 2 Jerry 23 IT
3 3 Alice 33 Sales
4 4 Bob 27 Marketing
5 5 Mike 26 <NA>
6 NA <NA> NA Marketing
交叉连接返回两个数据框中的所有可能的组合。可以使用 crossing()
函数进行交叉连接。下面是一个交叉连接的例子:
# 创建一个城市数据框
city <- data.frame(name = c("New York", "Los Angeles", "Chicago"))
# 进行交叉连接
crossing(employee, department, city)
输出:
# A tibble: 60 x 6
id name.x age name.y name x
<dbl> <chr> <dbl> <chr> <chr> <chr>
1 1 Tom 29 HR New Y~ <NA>
2 1 Tom 29 HR Los A~ <NA>
3 1 Tom 29 HR Chicago <NA>
4 1 Tom 29 IT New Y~ <NA>
5 1 Tom 29 IT Los A~ <NA>
6 1 Tom 29 IT Chicago <NA>
7 1 Tom 29 Sales New Y~ <NA>
8 1 Tom 29 Sales Los A~ <NA>
9 1 Tom 29 Sales Chicago <NA>
10 1 Tom 29 Marketing New Y~ <NA>
# ... with 50 more rows
dplyr 还提供了一组函数,用于筛选数据框中的行。这些函数包括 filter()
、arrange()
、distinct()
和 slice()
。
filter()
函数用于筛选数据框中符合条件的行。下面是一个 filter()
函数的例子:
# 从 employee 数据框中选择年龄大于 25 的行
filter(employee, age > 25)
输出:
id name age
1 1 Tom 29
2 3 Alice 33
3 4 Bob 27
4 5 Mike 26
arrange()
函数用于按指定的列对数据框进行排序。下面是一个 arrange()
函数的例子:
# 按照年龄从小到大对 employee 数据框排序
arrange(employee, age)
输出:
id name age
1 2 Jerry 23
2 5 Mike 26
3 4 Bob 27
4 1 Tom 29
5 3 Alice 33
distinct()
函数用于删除数据框中的重复行。下面是一个 distinct()
函数的例子:
# 从 employee 数据框中选择独特的年龄值
distinct(employee, age)
输出:
age
1 29
2 23
3 33
4 27
5 26
slice()
函数用于选择数据框中指定的行。下面是一个 slice()
函数的例子:
# 从 employee 数据框中选择前三行
slice(employee, 1:3)
输出:
id name age
1 1 Tom 29
2 2 Jerry 23
3 3 Alice 33
dplyr 还提供了一组函数,用于变换数据框中的列和值。这些函数包括 mutate()
、transmute()
、summarise()
和 group_by()
。
mutate()
函数用于添加新的变量到数据框中。下面是一个 mutate()
函数的例子:
# 在 employee 数据框中添加一个名为 income 的变量
mutate(employee, income = c(5000, 6000, 7000, 8000, 9000))
输出:
id name age income
1 1 Tom 29 5000
2 2 Jerry 23 6000
3 3 Alice 33 7000
4 4 Bob 27 8000
5 5 Mike 26 9000
transmute()
函数用于选择一部分列并在数据框中创建一个新的数据框。下面是一个 transmute()
函数的例子:
# 从 employee 数据框中选择名字和年龄并创建一个新的数据框
transmute(employee, name, age)
输出:
name age
1 Tom 29
2 Jerry 23
3 Alice 33
4 Bob 27
5 Mike 26
summarise()
函数用于汇总数据框的值。下面是一个 summarise()
函数的例子:
# 计算 employee 数据框中员工的平均年龄
summarise(employee, avg_age = mean(age))
输出:
avg_age
1 27.6
group_by()
函数用于按指定的列对数据框进行分组。下面是一个 group_by()
函数的例子:
# 对 department 数据框中的部门进行分组并计算每个部门中员工的平均年龄
employee %>%
inner_join(department, by = "id") %>%
group_by(name.y) %>%
summarise(avg_age = mean(age))
输出:
# A tibble: 4 x 2
name.y avg_age
<chr> <dbl>
1 HR 29
2 IT 23
3 Marketing 26.5
4 Sales 33
本文介绍了如何使用 dplyr 包连接 R 中的数据,并讨论了一些筛选和变换数据框的函数。dplyr 提供了一组功能强大且易于使用的函数,可以大大提高数据分析的效率。