📌  相关文章
📜  合并两个具有相同列名的数据框(1)

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

合并两个具有相同列名的数据框

在数据处理的过程中,我们经常需要将两个具有相同列名的数据框合并在一起。这时候,我们可以使用merge()函数来实现。

merge()函数的语法
merge(x, y, by, by.x, by.y, all, all.x, all.y, sort)

参数解释:

  • x:要合并的数据框1
  • y:要合并的数据框2
  • by:要合并的列名,可以是一个或多个列名。默认为所有公共列名。
  • by.x:x数据框中用于合并的列名,如果by参数不指定,则默认使用所有公共列名。
  • by.y:y数据框中用于合并的列名,如果by参数不指定,则默认使用所有公共列名。
  • all:是否使用外连接合并。默认为FALSE,表示只使用内连接合并,即只保留两个数据框中都有的行。如果为TRUE,则表示使用外连接合并,即保留所有行。
  • all.x:是否使用外连接合并x数据框。默认为FALSE
  • all.y:是否使用外连接合并y数据框。默认为FALSE
  • sort:是否排序。默认为TRUE
实例演示

我们以两个具有相同列名的数据框为例:

# 创建数据框df1
df1 <- data.frame(id = c(1, 2, 3, 4),
                  name = c("Alice", "Bob", "Cathy", "Dave"),
                  score1 = c(90, 85, 75, 80))

# 创建数据框df2
df2 <- data.frame(id = c(1, 2, 3, 5),
                  name = c("Alice", "Bob", "Cathy", "Emily"),
                  score2 = c(95, 90, 80, 85))

使用merge()函数合并这两个数据框:

# 合并数据框
df <- merge(df1, df2, by = c("id", "name"))

# 查看结果
df

结果如下:

  id  name score1 score2
1  1 Alice     90     95
2  2   Bob     85     90
3  3 Cathy     75     80

我们可以看到,合并后只保留了两个数据框中都有的行,即id为1、2、3的行。如果要保留所有行,可以设置all = TRUE

df <- merge(df1, df2, by = c("id", "name"), all = TRUE)

# 查看结果
df

结果如下:

  id  name score1 score2
1  1 Alice     90     95
2  2   Bob     85     90
3  3 Cathy     75     80
4  4  Dave     80     NA
5  5 Emily     NA     85

我们可以看到,合并后保留了所有行,用NA表示缺失值。如果要使用外连接合并x数据框或y数据框,可以设置all.xall.y参数为TRUE