在 R 编程中加入数据框
在 R 语言中,数据框是用于存储表格数据的通用数据对象。数据框被认为是 R 编程中最流行的数据对象,因为它更容易以表格形式分析数据。数据框也可以作为床垫教授,其中矩阵的每一列都可以是不同的数据类型。数据框由三个主要组件组成,即数据、行和列。
在 R 中,我们使用merge()
函数来合并 R 中的两个数据帧。这个函数存在于dplyr包的join()
函数中。连接两个数据框的最重要条件是列类型应该与合并发生的列类型相同。 merge()
函数的工作方式与 DBMS 中的 join 类似。 R中可用的合并类型是,
- 自然连接或内部连接
- 左外连接
- 右外连接
- 全外连接
- 交叉连接
- 半连接
- 反连接
R 中merge()
函数的基本语法:
Syntax:
merge(df1, df2, by.df1, by.df2, all.df1, all.df2, sort = TRUE)
Parameters:
df1: one dataframe
df2: another dataframe
by.df1, by.df2: The names of the columns that are common to both df1 and df2.
all, all.df1, all.df2: Logical values that actually specify the type of merging happens.
现在让我们尝试一一了解所有类型的合并。首先,我们将创建两个数据框,这将帮助我们轻松理解每个连接。
# 数据框 1
df1 = data.frame(StudentId = c(101:106),
Product = c("Hindi", "English",
"Maths", "Science",
"Political Science",
"Physics"))
df1
输出:
StudentId Product
1 101 Hindi
2 102 English
3 103 Maths
4 104 Science
5 105 Political Science
6 106 Physics
# 数据框 2
df2 = data.frame(StudentId = c(102, 104, 106,
107, 108),
State = c("Manglore", "Mysore",
"Pune", "Dehradun", "Delhi"))
df2
输出:
StudentId State
1 102 Manglore
2 104 Mysore
3 106 Pune
4 107 Dehradun
5 108 Delhi
自然连接或内部连接
内连接用于仅保留那些与数据帧匹配的行,在此,我们实际上指定了参数all = FALSE 。如果我们尝试使用集合论来理解这一点,那么我们可以在这里说我们实际上是在执行交集操作。例如:
A = [1, 2, 3, 4, 5]
B = [2, 3, 5, 6]
Then the output of natural join will be (2, 3, 5)
它是 R 中可用的最简单和最常见的连接类型。现在让我们尝试使用 R 程序来理解这一点:
例子:
# R program to illustrate
# Joining of dataframes
df = merge(x = df1, y = df2, by = "StudentId")
df
输出:
StudentId Product State
1 102 English Manglore
2 104 Science Mysore
3 106 Physics Pune
左外连接
Left Outer Join 基本上是包含数据帧 x 的所有行,并且仅包含 y 中匹配的行,在此,我们实际上指定了参数x = TRUE 。如果我们尝试使用基本集合论来理解这一点,那么我们可以在这里说我们实际上是在显示完整的集合 x。现在让我们尝试使用 R 程序来理解这一点:
例子:
# R program to illustrate
# Joining of dataframes
df = merge(x = df1, y = df2, by = "StudentId",
all.x = TRUE)
df
输出:
StudentId Product State
1 101 Hindi NA
2 102 English Manglore
3 103 Maths NA
4 104 Science Mysore
5 105 Political Science NA
6 106 Physics Pune
右外连接
是的,外部连接基本上是包含数据帧 y 的所有行,并且仅包含来自 x 的匹配行,在这种情况下,我们实际上指定了参数y = TRUE 。如果我们尝试使用基本集合论来理解这一点,那么我们可以在这里说我们实际上是在展示一个完整的集合 y。现在让我们尝试使用 R 程序来理解这一点:
例子:
# R program to illustrate
# Joining of dataframes
df = merge(x = df1, y = df2, by = "StudentId",
all.y = TRUE)
df
输出:
StudentId Product State
1 102 English Manglore
2 104 Science Mysore
3 106 Physics Pune
4 107 NA Dehradun
5 108 NA Delhi
全外连接
外连接基本上用于保留两个数据帧中的所有行,在此,我们实际上指定了参数all = TRUE 。如果我们尝试使用基本集合论来理解这一点,那么我们可以在这里说我们实际上是在执行联合选项。现在让我们尝试使用 R 程序来理解这一点:
例子:
# R program to illustrate
# Joining of dataframes
df = merge(x = df1, y = df2, by = "StudentId",
all = TRUE)
df
输出:
StudentId Product State
1 101 Hindi NA
2 102 English Manglore
3 103 Maths NA
4 104 Science Mysore
5 105 Political Science NA
6 106 Physics Pune
7 107 NA Dehradun
8 108 NA Delhi
交叉连接
交叉连接也称为笛卡尔连接,导致一个数据帧的每一行都连接到另一个数据帧的每一行。在集合论中,这种类型的连接被称为两个集合之间的笛卡尔积。现在让我们尝试使用 R 程序来理解这一点:
例子:
# R program to illustrate
# Joining of dataframes
df = merge(x = df1, y = df2, by = NULL)
df
输出:
StudentId.x Product StudentId.y State
1 101 Hindi 102 Manglore
2 102 English 102 Manglore
3 103 Maths 102 Manglore
4 104 Science 102 Manglore
5 105 Political Science 102 Manglore
6 106 Physics 102 Manglore
7 101 Hindi 104 Mysore
8 102 English 104 Mysore
9 103 Maths 104 Mysore
10 104 Science 104 Mysore
11 105 Political Science 104 Mysore
12 106 Physics 104 Mysore
13 101 Hindi 106 Pune
14 102 English 106 Pune
15 103 Maths 106 Pune
16 104 Science 106 Pune
17 105 Political Science 106 Pune
18 106 Physics 106 Pune
19 101 Hindi 107 Dehradun
20 102 English 107 Dehradun
21 103 Maths 107 Dehradun
22 104 Science 107 Dehradun
23 105 Political Science 107 Dehradun
24 106 Physics 107 Dehradun
25 101 Hindi 108 Delhi
26 102 English 108 Delhi
27 103 Maths 108 Delhi
28 104 Science 108 Delhi
29 105 Political Science 108 Delhi
30 106 Physics 108 Delhi
半连接
这种连接有点像内部连接,只选择了左侧的数据框列和值。现在让我们尝试使用 R 程序来理解这一点:
例子:
# R program to illustrate
# Joining of dataframes
# Import required library
library(dplyr)
df = df1 %>% semi_join(df2, by = "StudentId")
df
输出:
StudentId Product
1 102 English
2 104 Science
3 106 Physics
反连接
在集合论方面,我们可以将反连接称为集合差分操作,例如 A = (1, 2, 3, 4) B = (2, 3, 5) 那么 AB 的输出将被设置为 (1 , 4).这个连接有点像 df1 – df2,因为它基本上选择了 df1 中实际上不存在于 df2 中的所有行。现在让我们尝试使用 R 程序来理解这一点:
例子:
# R program to illustrate
# Joining of dataframes
# Import required library
library(dplyr)
df = df1 %>% anti_join(df2, by = "StudentId")
df
输出:
StudentId Product
1 101 Hindi
2 103 Maths
3 105 Political Science