R语言【dplyr】——inner_join(x,y)只保留参数【x】中与参数【y】中连接键匹配的观测值

Package dplyr version 1.1.4


Parameters

inner_join(
  x,
  y,
  by = NULL,
  copy = FALSE,
  suffix = c(".x", ".y"),
  ...,
  keep = NULL
)

## S3 method for class 'data.frame'
inner_join(
  x,
  y,
  by = NULL,
  copy = FALSE,
  suffix = c(".x", ".y"),
  ...,
  keep = NULL,
  na_matches = c("na", "never"),
  multiple = "all",
  unmatched = "drop",
  relationship = NULL
)

参数【x,y】:一对数据集、数据集扩展(如 tibble)或 lazy data frames(如来自 dbplyrdtplyr 的数据帧)。

参数【by】:使用 join_by() 创建的联接规范,或要联接的变量的字符向量。

  • 如果为 NULL(默认值),*_join() 将执行自然连接,使用参数【x,y】的所有共同变量。会有一条信息列出变量,以便您检查它们是否正确;如果明确提供参数【by】,就可以抑制该信息。
  • 要连接参数【x,y】之间的不同变量,请使用 join_by() 规范。例如,join_by(a == b) 将匹配 x$ay$b
  • 要通过多个变量连接,请使用带有多个表达式的 join_by() 规范。例如,join_by(a == b, c == d) 将匹配 x$ay$bx$cy$d。如果参数【x,y】的列名相同,可以只列出变量名,如 join_by(a,c),从而缩短计算时间。
  • join_by() 还可用于执行不等式连接、滚动连接和重叠连接。
  • 对于简单的相等连接,也可以指定一个变量名字符向量来连接。例如,by = c("a", "b") x$a 连接到 y$a,将 x$b 连接到 y$b。如果参数【x,y】的变量名不同,可使用命名字符向量,如 by = c("x_a" = "y_a", "x_b" = "y_b")
  • 要执行交叉连接,生成参数【x,y】的所有组合,请参见 cross_join()

参数【copy】:如果参数【x,y】不是来自同一个数据源,且参数【copy】TRUE,那么参数【y】到与参数【x】相同的 src 中。

参数【suffix】:如果参数【x,y】中存在非连接的重复变量,这些后缀将被添加到输出中以消除歧义。应为长度为 2 的字符向量。

参数【...】:传递给方法的其他参数。

参数【keep】:输出中是否应该保留参数【x,y】的连接键?

  • 如果为 NULL(默认值),则等价连接只保留参数【x】的键值,而不等价连接则保留参数【x,y】的键值。
  • 如果为 TRUE,则保留来自两个参数【x,y】的所有键值。
  • 如果为 FALSE,则只保留来自参数【x】的键值。对于 right_join()full_join(),与只存在于参数【x】中的行相对应的列中的数据会合并到来自参数【x】的列中。

参数【na_matches】:两个 NA 值或两个 NaN 值是否应该匹配?

  • "na"(默认值)将两个 NA 值或两个 NaN 值视为相等,就像 %in%match()merge()
  • "never" 将两个 NA 或两个 NaN 值视为不同的值,绝不会将它们匹配在一起或与任何其他值匹配。这类似于数据库源的连接和 base::merge(incomparables = NA)

参数【multiple】:处理参数【x】中与参数【y】中多个匹配项匹配的行,对于参数【x】中的每一行:

  • 默认设置为 "all",返回参数【y】中检测到的所有匹配。
  • "any" 返回在参数【y】中检测到的一个匹配,但不保证返回的是哪个匹配。如果只需要检测是否至少有一个匹配项,"any" 通常比 "first""last" 更快。
  • "first" 返回在参数【y】中检测到的第一个匹配项。
  • "last" 返回在参数【y】中检测到的最后一个匹配项。

参数【unmatched】:如何处理会导致丢弃行的不匹配键?

  • "drop" 会将不匹配的键从结果中删除。
  • 如果检测到不匹配的键,"error" 会抛出错误。

参数【unmatched】的目的是防止在连接过程中意外丢弃记录。它只检查输入中可能丢行的不匹配键。

  • left_join() 中,它检查参数【y】
  • right_join() 中,它检查参数【x】
  • inner_join() 中,它检查参数【x,y】。在这种情况下,参数【unmatched】也可以是一个长度为 2 的字符向量,以单独指定参数【x,y】的行为。

参数【relationship】:处理参数【x,y】的键之间的预期关系。如果从下面列表中选择的预期关系无效,则会出错。

  • 默认情况下为 NULL,不认为参数【x,y】之间存在任何关系。不过,对于相等连接,它会检查多对多关系(这通常是意料之外的),如果出现这种关系,它会发出警告,鼓励你仔细查看输入,或通过指定 "many-to-many" 来明确这种关系。
  • "one-to-one" 期待的关系:
    • 参数【x】中的每一行最多匹配参数【y】中的一行。
    • 参数【y】中的每一行最多匹配参数【x】中的一行。
  • "one-to-many" 期待的关系:
    • 参数【y】中的每一行最多与参数【x】中的一行匹配。
  • "many-to-one" 期待的关系:
    • 参数【x】中的每一行最多与参数【y】中的一行匹配。
  • "many-to-many" 不执行任何关系检查,但如果您知道存在这种关系,则可以通过它明确表示这种关系。

参数【relationship】不处理零匹配的情况。请参阅参数【unmatched】

inner_join() 只保留参数【x】中与参数【y】中键匹配的观测值。inner_join()最重要的特性是,结果中不包含参数【x】参数【y】中不匹配的记录。这意味着在大多数分析中,inner_join()一般都不合适,因为太容易丢失观测值。


Value

参数【x】类型相同的对象(包括相同的组)。尽可能保留参数【x】的行列顺序。输出结果具有以下属性:

  • 连接类型会影响记录。
    • inner_join() 返回匹配的参数【x】行数据。
    • left_join() 会返回所有参数【x】行数据。
    • right_join() 返回匹配的参数【x】行数据,然后是不匹配的参数【y】行数据。
    • full_join() 返回所有参数【x】行数据,然后是不匹配的参数【y】行数据。
  • 输出列包括参数【x】的所有列和参数【y】的所有非连接列。如果 keep = TRUE,则也包括 参数【y】的连接列。
  • 如果参数【x】参数【y】中的非连接列名称相同,则会添加后缀以消除歧义。如果 keep = TRUE,且参数【x】参数【y】中的连接列具有相同名称,则也会添加后缀以消除歧义。
  • 如果 keep = FALSE,包含在参数【by】中的输出列将被强制为参数【x】参数【y】之间的共同类型。
  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
R语言,`merge()`函数和`inner_join()`函数都可以用于合并(连接)两个数据框。它们的主要区别在于语法和执行方式。 `merge()`函数是R的基本函数,可以根据指定的(或多个)将两个数据框进行合并。它可以根据匹配方式,分为内连接、外连接、左连接和右连接等不同类型。在默认情况下,`merge()`函数执行内连接inner join),即只保留两个数据框匹配的行。 以下是使用`merge()`函数进行内连接的示例: ```R merged_df <- merge(df1, df2, by = "key") ``` 其,`df1`和`df2`是要合并的两个数据框,`by`参数指定了用于匹配。这将返回一个新的数据框`merged_df`,其只包含`df1`和`df2`匹配的行。 而`inner_join()`函数则是dplyr提供的函数,它也执行内连接操作。相比于`merge()`函数,`inner_join()`函数提供了更简洁的语法,并且可以方便地与其他dplyr函数进行链式操作。 以下是使用`inner_join()`函数进行内连接的示例: ```R library(dplyr) merged_df <- inner_join(df1, df2, by = "key") ``` 同样,`df1`和`df2`是要合并的两个数据框,`by`参数指定了用于匹配。这将返回一个新的数据框`merged_df`,其只包含`df1`和`df2`匹配的行。 总结来说,`merge()`函数是R的基本函数,可以执行不同类型的连接操作,而`inner_join()`函数dplyr提供的函数,用于执行内连接操作,并提供了更简洁的语法和链式操作的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ALittleHigh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值