📌  相关文章
📜  通过 R 编程中的公共列合并两个数据框 - merge()函数(1)

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

通过 R 编程中的公共列合并两个数据框 - merge() 函数

在 R 编程中,需要将两个数据框按某个公共列进行合并。R 提供了一个内置的函数 merge(),该函数可以快速的实现数据框合并,并且支持多种合并方式。

merge() 函数的语法
merge(x, y, by = NULL, by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all, sort = TRUE, suffixes = c(".x", ".y"), ...)

参数解释:

  • x:第一个数据框。
  • y:第二个数据框。
  • by:一个字符向量,指定要合并的公共列名。
  • by.x:一个字符向量,指定第一个数据框中要合并的公共列名。
  • by.y:一个字符向量,指定第二个数据框中要合并的公共列名。
  • all:一个逻辑值,表示是否包含合并后的所有行,默认为 FALSE
  • all.x:一个逻辑值,表示是否包含第一个数据框中没有匹配的行,默认为 all
  • all.y:一个逻辑值,表示是否包含第二个数据框中没有匹配的行,默认为 all
  • sort:一个逻辑值,表示是否按照 by 列进行排序,默认为 TRUE
  • suffixes:一个字符向量,指定合并后的列名后缀。
  • ...:其他参数。
merge() 函数的示例

为了演示 merge() 函数的使用方法,我们创建两个数据框 birds 和 flowers。

# 创建 birds 数据框
birds <- data.frame(
  name = c("ostrich", "penguin", "parrot", "hawk", "crow"),
  height = c(220, 70, 30, 60, 40),
  weight = c(140, 30, 1, 1, 1)
)

# 创建 flowers 数据框
flowers <- data.frame(
  name = c("tulip", "daisy", "rose", "lily", "sunflower"),
  color = c("red", "white", "pink", "white", "yellow"),
  season = c("spring", "spring", "summer", "summer", "summer")
)

现在,我们要将两个数据框按照 name 列进行合并。

# 按照 name 列进行合并
merge(birds, flowers, by = "name")

输出结果如下:

     name height weight   color  season
1    crow     40      1   white  summer
2  hawk       60      1    pink  summer
3 ostrich    220    140     red  spring
4  parrot     30      1   white  summer
5 penguin     70     30  yellow  summer

可以看到,merge() 函数默认按照 by 列进行排序,并且只保留两个数据框中都有的行。

如果要保留所有的行,我们可以将 all 参数设置为 TRUE。

# 保留所有行进行合并
merge(birds, flowers, by = "name", all = TRUE)

输出结果如下:

       name height weight   color  season
1      crow     40      1   white  summer
2    hawk       60      1    pink  summer
3  ostrich    220    140     red  spring
4   parrot     30      1   white  summer
5  penguin     70     30  yellow  summer
6   daisy      NA     NA   white  spring
7    lily      NA     NA   white  summer
8    rose      NA     NA    pink  summer
9 sunflower    NA     NA  yellow  summer
10   tulip      NA     NA     red  spring

可以看到,保留了所有行。

如果两个数据框中的公共列名不同,可以使用 by.x 和 by.y 参数指定要合并的列名。

# 指定公共列名进行合并
birds2 <- data.frame(
  bird_name = c("ostrich", "penguin", "parrot", "hawk", "crow"),
  height = c(220, 70, 30, 60, 40),
  weight = c(140, 30, 1, 1, 1)
)

flowers2 <- data.frame(
  flower_name = c("tulip", "daisy", "rose", "lily", "sunflower"),
  color = c("red", "white", "pink", "white", "yellow"),
  season = c("spring", "spring", "summer", "summer", "summer")
)

merge(birds2, flowers2, by.x = "bird_name", by.y = "flower_name")

输出结果如下:

  bird_name height weight   color  season
1      crow     40      1   white  summer
2      hawk     60      1    pink  summer
3   ostrich    220    140     red  spring
4    parrot     30      1   white  summer
5   penguin     70     30  yellow  summer

如果合并后的列名相同,可以使用 suffixes 参数指定合并后的列名的后缀。

# 指定列名后缀
merge(birds, flowers, by = "name", suffixes = c(".bird", ".flower"))

输出结果如下:

     name height.bird weight.bird color.flower season.flower
1    crow          40           1        white        summer
2  hawk            60           1         pink        summer
3 ostrich         220         140          red        spring
4  parrot          30           1        white        summer
5 penguin          70          30       yellow        summer

可以看到,列名在合并后添加了后缀。