📜  在 R 编程中加入数据框

📅  最后修改于: 2022-05-13 01:55:26.239000             🧑  作者: Mango

在 R 编程中加入数据框

在 R 语言中,数据框是用于存储表格数据的通用数据对象。数据框被认为是 R 编程中最流行的数据对象,因为它更容易以表格形式分析数据。数据框也可以作为床垫教授,其中矩阵的每一列都可以是不同的数据类型。数据框由三个主要组件组成,即数据、行和列。

在 R 中,我们使用merge()函数来合并 R 中的两个数据帧。这个函数存在于dplyr包的join()函数中。连接两个数据框的最重要条件是列类型应该与合并发生的列类型相同。 merge()函数的工作方式与 DBMS 中的 join 类似。 R中可用的合并类型是,

  1. 自然连接或内部连接
  2. 左外连接
  3. 右外连接
  4. 全外连接
  5. 交叉连接
  6. 半连接
  7. 反连接

R 中merge()函数的基本语法:

现在让我们尝试一一了解所有类型的合并。首先,我们将创建两个数据框,这将帮助我们轻松理解每个连接。
# 数据框 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