R语言中的inner_join, full_join, left_join, right_join

本文通过实例详细解析R语言中数据集连接的四种类型:inner_join、full_join、left_join和right_join,展示了如何基于共享键进行数据集合并,并处理缺失值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在R for Data Science中,作者用了非常直观的例子解释了上面的四个概念。说明如下:

我们的数据集是这样的:

x <- tribble(
  ~key, ~val_x,
  1, "x1",
  2, "x2",
  3, "x3"
)
y <- tribble(
  ~key, ~val_y,
  1, "y1",
  2, "y2",
  4, "y3"
)

可以看出,x与y的key都有1,2,但是x的key里面有3,y的key里面有4.

下面我们来看这四个概念:

1. inner_join

x %>%
  inner_join(y, by = "key")

其结果是

key val_x val_y
  <dbl> <chr> <chr>
     1 x1    y1   
     2 x2    y2

可以看出,此时基于key的连接只保留了共同的key值1与2对应的数据;

2. full_join

x %>%
  full_join(y, by = "key")

其结果是

key val_x val_y
  <dbl> <chr> <chr>
  1 x1    y1   

  2 x2    y2   

  3 x3    NA   
  4 NA    y3

可以看出,此时基于key的连接保留了所有key值对应的数据,当相应的值不存在的时候,用NA代替;

3. left_join

x %>%
  left_join(y, by = "key")

此时的结果为
<dbl> <chr> <chr>
    1 x1    y1   
    2 x2    y2   
    3 x3    NA 

可以看出, 此时基于key的连接只保留了x对应的key值的数据,当相应的值不存在的时候,用NA代替;

4.  right_join

x %>%
  right_join(y, by = "key")

此时的结果为

key val_x val_y
  <dbl> <chr> <chr>
1 x1    y1   
2 x2    y2   
4 NA   y3

可以看出,此时基于key的连接只保留了y对应的key值的数据,当相应的值不存在的时候,用NA代替。 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R语言中的left_join是一种数据连接操作,可以将两个数据框按照指定的列进行连接,类似于SQL中的左连接操作。通过left_join,可以将一个数据框的所有行和另一个数据框中对应列值匹配的行连接起来。这个函数可以在pandas库中的merge方法中找到类似的功能。 举个例子来说明,假设有两个数据框x和y,它们分别包含列key、val_x和val_y的数据。可以使用left_join将这两个数据框按照key列进行连接,连接后的结果包含了x和y两个数据框的所有行,并且将对应的val_x和val_y值进行了匹配。 具体实现可以使用R语言的dplyr包中的left_join函数,以下是一个示例代码: ``` library(dplyr) x <- tribble( ~key, ~val_x, 1, "x1", 2, "x2", 3, "x3" ) y <- tribble( ~key, ~val_y, 1, "y1", 2, "y2", 4, "y3" ) result <- left_join(x, y, by = "key") ``` 上述代码中,通过left_join函数将数据框x和y按照key列进行连接,并将结果存储在result变量中。连接的方式是左连接,即保留x数据框的所有行,并将y数据框中对应的val_y值进行匹配。 总结一下,R语言left_join函数提供了一种按照指定列进行连接操作的方法,可以将两个数据框进行连接,并匹配对应的值。这个函数在处理数据连接时非常有用且方便。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [详解PANDAS 数据合并与重塑(join/merge篇)](https://download.youkuaiyun.com/download/weixin_38584148/13996844)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [R语言中的inner_join, full_join, left_join, right_join](https://blog.youkuaiyun.com/lww1993/article/details/82023815)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值