前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >表格的融合

表格的融合

原创
作者头像
爱学习的小明明
修改2020-09-14 16:58:10
5560
修改2020-09-14 16:58:10
举报
文章被收录于专栏:R语言学习R语言学习R语言学习

有时候两个数据框并没有很好地保持一致,不能简单地使用cbind()和rbind()函数,所以他们需要一个共同的列(common key)作为细胞融合的依据。最常用的内置函数为merge()和dplyr()包中的*_join(系列函数。

1 merge()函数

优势在于对于不同的数据框,可以指定不同的匹配列名;缺点再于运行速度较慢,其中by.x指定左边数据框匹配列,by.y指定右边数据框匹配列。

> df1<-data.frame(x=c("a","b","c"),y=1:3)
> df2<-data.frame(x=c("a","b","d"),z=c(2,5,3))
> df3<-data.frame(g=c("a","b","d"),z=c(2,5,3))
> df4<-data.frame(x=c("a","b","d"),y=c(1,4,2),z=c(2,5,3))
> d_m1<-merge(df1,df2,by="x",all=TURE)

all参数决定有缺失值的行处理原则

d_m1<-merge(df1,df2,by="x",all=TRUE)
> d_m1
  x  y  z
1 a  1  2
2 b  2  5
3 c  3 NA
4 d NA  3
> d_m1<-merge(df1,df2,by="x",all=FALSE) #有缺损的被去掉了
> d_m1
  x y z
1 a 1 2
2 b 2 5

对于列明不一样的表合并,可以用by.x和by.y

> d_m3<-merge(df1,df3,by.x="x",by.y ="g")
> d_m3
  x y z
1 a 1 2
2 b 2 5

2 *_join()系列函数

dplyr包提供了left_join()、 right_join()、 inner_join()、 full_join()四个函数。其中full_join()函数主要用来生成两个集合的并集;inner_join()生成有效数据;其他两个函数使用的较少。另外两个表格融合时会用NA代替不存在的值。

1只保留左表的数据

> d_join<-left_join(df1,df2,by="x")
> d_join
  x y  z
1 a 1  2
2 b 2  5
3 c 3 NA

2只保留右表的数据

> e_join<-right_join(df1,df2,by="x")
> e_join
  x  y z
1 a  1 2
2 b  2 5
3 d NA 3

3只保留两个表共有的数据

> f_join<-inner_join(df1,df2,by="x")
> f_join
  x y z
1 a 1 2
2 b 2 5

4保留两个表所有信息

> g_join<-full_join(df1,df2,by="x")
> g_join
  x  y  z
1 a  1  2
2 b  2  5
3 c  3 NA
4 d NA  3

5多列匹配合并 by=c("x","y")

> h_join<-left_join(x=df1,y=df4,by=c("x","y"))
> h_join
  x y  z
1 a 1  2
2 b 2 NA
3 c 3 NA

5 根据两个标的不同列明合并 by=c("x"="g")

> i_join
  x y  z
1 a 1  2
2 b 2  5
3 c 3 NA

6如果遇到了两个表中有一列同名,但值不相同,合并的时候又都想保留下来,就可以用suffix给每个标的重复列明增加后缀

> j_join<-left_join(x=df1,y=df4,by="x",suffix=c(".1",".2"))
> j_join
  x y.1 y.2  z
1 a   1   1  2
2 b   2   4  5
3 c   3  NA NA

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 merge()函数
    • all参数决定有缺失值的行处理原则
      • 对于列明不一样的表合并,可以用by.x和by.y
      • 2 *_join()系列函数
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档