📅  最后修改于: 2023-12-03 15:28:23.671000             🧑  作者: Mango
在 R 编程中,需要将两个数据框按某个公共列进行合并。R 提供了一个内置的函数 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()
函数的使用方法,我们创建两个数据框 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
可以看到,列名在合并后添加了后缀。