gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 21:39:19 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:
    返回两个表中的所有行,连接左侧表中在右侧表中具有匹配键的记录。
  • 一个left outer join (or simply left join) df1df2
    返回左表中的所有行以及右表中具有匹配键的任何行。
  • 一个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" 其中 CustomerId_in_df1 是第一个数据框中的列名称,CustomerId_in_df2 是第二个数据框中的列名称。 (如果您需要合并多列,这些也可以是向量。)

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

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