首页 > 其他分享 > mutate-joins {dplyr}:变异联接

mutate-joins {dplyr}:变异联接

时间:2023-06-10 12:55:26浏览次数:37  
标签:mutate join 某人 NA joins dplyr 名次 class2 class1

可变联接将列从 y 添加到 x,并根据键值匹配行:

inner_join():包括 x 和 y 中的所有行。

left_join():包括 x 中的所有行。

right_join():包括 y 中的所有行。

full_join():包括 x 或 y 中的所有行。

如果 x 中的一行与 y 中的多行匹配,则 y 中的所有行将针对 x 中的每个匹配行返回一次。

实例

假设有两个班级的考试名次表,class1和class2,然后将通过四种方式组合这两个表,来达到不同要求比较的目的。

class1 <- tribble(
  ~'名次',~'姓名',
  '第一名','王某人',
  '第二名','张周人',
  '第三名','李某人'
)
class2 <- tribble(
  ~'名次',~'姓名',
  '第一名','胡某人',
  '第二名','刘周人',
  '第四名','于某人'
)

class1:

class2:

inner_join()

> inner_join(class1,class2,by='名次')
# A tibble: 2 x 3
  名次   姓名.x 姓名.y
  <chr>  <chr>  <chr> 
1 第一名 王某人 胡某人
2 第二名 张周人 刘周人

一班和二班均有第一名和第二名,所以等值连接把两张表里名次相同的人连接起来。

left_join()

> left_join(class1,class2,by='名次')
# A tibble: 3 x 3
  名次   姓名.x 姓名.y
  <chr>  <chr>  <chr> 
1 第一名 王某人 胡某人
2 第二名 张周人 刘周人
3 第三名 李某人 NA    

可以把参数 (class1,class2,by=‘名次’)这么理解,class1在左边就是左,class2在右边就是右。所以左连接说的保留x中的所有观测就是指:保留左边的即class1中的所有观测。那么class1的第一名、第二名、第三名都保留了下来,而class2的表里有的第一名和第二名的人的名字就连接过来了,没有第三名,则补充NA,第四名舍弃。
注意:一般情况下都会使用左连接,这样可以保留原表数据。

right_join()

> right_join(class1,class2,by='名次')
# A tibble: 3 x 3
  名次   姓名.x 姓名.y
  <chr>  <chr>  <chr> 
1 第一名 王某人 胡某人
2 第二名 张周人 刘周人
3 第四名 NA     于某人

看懂了左连接,这个右连接就容易了。右连接,则保留class2中的所有观测值,所以第一名、第二名、第四名都保留下来。一班class1则是第三名舍去,第四名的位置补充NA。

full_join()

> full_join(class1,class2,by='名次')
# A tibble: 4 x 3
  名次   姓名.x 姓名.y
  <chr>  <chr>  <chr> 
1 第一名 王某人 胡某人
2 第二名 张周人 刘周人
3 第三名 李某人 NA    
4 第四名 NA     于某人

全连接则是把左右两边的表格都保留下来,缺失的值补充NA,很好理解。

其他情况

上面几种情况都是两个表中有名称相同的键值。如果数据内容是一种类型,只是键的名称不同,可以采用这种方式:
left_join(x,y,by=c(‘a’=‘b’))
比如二班还有一张表,表示运动会各项目参与的人员

class2<-tribble(
  ~'名次',~'姓名',
  '第一名','胡某人',
  '第二名','刘某人',
  '第四名','于某人'
)
sports<-tribble(
  ~'项目',~'运动员',
  '乒乓球','于某人',
  '篮球','胡某人',
  '足球','刘某人'
)

sports:

 class2:

这两个表的键名都不同,我们通过class2中的“姓名”和sports中的“运动员”对两个表进行连接

> left_join(class2,sports,by=c('姓名'='运动员'))
# A tibble: 3 x 3
  名次   姓名   项目  
  <chr>  <chr>  <chr> 
1 第一名 胡某人 篮球  
2 第二名 刘某人 足球  
3 第四名 于某人 乒乓球

两个表就连接起来了,可以看出二班排名第1、2、4的同学参与的运动会项目。

 

标签:mutate,join,某人,NA,joins,dplyr,名次,class2,class1
From: https://www.cnblogs.com/xiaogaobugao/p/17471094.html

相关文章

  • Lecture#11 Joins Algorithms
    1Joins在关系型数据库中,我们常常通过规范化(Normalization)设计避免信息冗余;因此查询时,就需要通过Join将不同table中的数据合并来重建数据。本课关注双表的内等值连接。原则上我们希望,连接时将小表放到左侧(作为外表)。首先要讨论的是:Join的输出和成本分析。1.1Oper......
  • 【807】R语言mutate函数
    参考:R语言mutate()实例讲解mutate()R语言中的函数用于在DataFrame中添加新变量,这些变量是通过对现有变量进行操作而形成的。用法:mutate(x,expr)参数:x:数据帧expr:......
  • .Net6 + GraphQL + MongoDb 实现Mutate更新数据
    介绍Query的部分我们讲完了,现在讲一下Mutate(就是操作增修删)本节讲一下修改,删除就不讲了正文publicrecordUpdatePostInput(stringPostId,stringTitle,string......
  • logstash mutate gsub 正则替换内容
    记录下,网络设备默认有些日志内容无用,用正则替换删除input{    udp{host=>"127.0.0.1"port=>515type=>"Hillstone"}}filter{  mutate{   ......
  • 多表查询与7种JOINS的实现
    多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也......
  • 拓端数据tecdat|R语言代写dplyr-高效的数据变换与整理工具
    1、背景简介在数据分析工作中,经常需要对原始的数据集进行清洗、整理以及变换。常用的数据整理与变换工作主要包括:特定分析变量的选取、满足条件的数据记录的筛选、按某一......
  • Joins
    连接是组合来自两个或多个表、视图或物化视图的行的查询 。以下示例连接employees和departments表(FROM子句),仅选择满足指定条件的行(WHERE子句),并使用投影从两列中检索数据(S......