📜  使用 Dplyr 包连接 R 中的数据(1)

📅  最后修改于: 2023-12-03 15:22:10.940000             🧑  作者: Mango

使用 Dplyr 包连接 R 中的数据

介绍

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() 函数用于筛选数据框中符合条件的行。下面是一个 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() 函数用于按指定的列对数据框进行排序。下面是一个 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() 函数用于删除数据框中的重复行。下面是一个 distinct() 函数的例子:

# 从 employee 数据框中选择独特的年龄值
distinct(employee, age)

输出:

  age
1  29
2  23
3  33
4  27
5  26
slice()

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() 函数用于添加新的变量到数据框中。下面是一个 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() 函数用于选择一部分列并在数据框中创建一个新的数据框。下面是一个 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() 函数用于汇总数据框的值。下面是一个 summarise() 函数的例子:

# 计算 employee 数据框中员工的平均年龄
summarise(employee, avg_age = mean(age))

输出:

  avg_age
1    27.6
group_by()

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 提供了一组功能强大且易于使用的函数,可以大大提高数据分析的效率。