gpt4 book ai didi

r - 如何连接(合并)数据框(内、外、左、右)

转载 作者:行者123 更新时间:2023-12-04 17:26:36 25 4
gpt4 key购买 nike

给定两个数据框:

df1 = data.frame(CustomerId = c(1:6), Product = c(rep("Toaster", 3), rep("Radio", 3)))
df2 = data.frame(CustomerId = c(2, 4, 6), State = c(rep("Alabama", 2), rep("Ohio", 1)))

df1
# CustomerId Product
# 1 Toaster
# 2 Toaster
# 3 Toaster
# 4 Radio
# 5 Radio
# 6 Radio

df2
# CustomerId State
# 2 Alabama
# 4 Alabama
# 6 Ohio

如何使用数据库样式,即 sql style, joins ?也就是说,我如何获得:

  • inner join df1df2:
    仅返回左表在右表中具有匹配键的行。
  • outer join df1df2:
    返回两个表中的所有行,从左侧连接右表中具有匹配键的记录。
  • A left outer join (or simply left join) df1df2
    返回左表中的所有行,以及右表中具有匹配键的所有行。
  • A right outer join df1df2
    返回右表中的所有行,以及左表中具有匹配键的所有行。

额外学分:

如何执行 SQL 样式的 select 语句?

最佳答案

通过使用 merge 函数及其可选参数:

内部连接: merge(df1, df2) 将适用于这些示例,因为 R 会自动通过公共(public)变量名称连接帧,但是您很可能希望指定 merge(df1, df2, by = "CustomerId") 以确保您只匹配所需的字段。如果匹配变量在不同的数据框中具有不同的名称,您还可以使用 by.xby.y 参数。

外连接: merge(x = df1, y = df2, by = "CustomerId", all = TRUE)

左外: merge(x = df1, y = df2, by = "CustomerId", all.x = TRUE)

右外: merge(x = df1, y = df2, by = "CustomerId", all.y = TRUE)

交叉连接: merge(x = df1, y = df2, by = NULL)

就像内部连接一样,您可能希望将“CustomerId”显式传递给 R 作为匹配变量。 合并;如果输入 data.frames 意外更改并且以后更容易阅读,它会更安全。

您可以通过给 by 一个向量来合并多个列,例如 by = c("CustomerId", "OrderId")

如果要合并的列名称不同,您可以指定,例如,by.x = "CustomerId_in_df1", by.y = "CustomerId_in_df2" where CustomerId_in_df1 是第一个数据框中列的名称,CustomerId_in_df2 是第二个数据框中列的名称。 (如果您需要合并多列,这些也可以是向量。)

关于r - 如何连接(合并)数据框(内、外、左、右),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57921748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com