R语言中两表连接且输出不重复数据

来源:互联网 发布:mac如何更新系统版本 编辑:程序博客网 时间:2024/06/05 04:22

在做项目中遇到了如此问题,其中整理的结果表中没有会员ID信息,只有会员电话号码信息,且每一行为唯一一个会员。另外一张member表中包含会员ID以及会员电话信息,但是这张表有重复的会员信息,也就是说一个会员在member表中多次出现,memeber表比整理的表要大很多。

说明:

1.在项目过程中,数据量较大,用到的是data.table包,需要用到SQL中的语句减少代码量,因此需要sqldf包。

2.以下例子中xx中的a1在yy中都有对应的值。

3.yy中的a1与b是一一对应的关系,不存在同一个a1值对应不同的b值。

4.此程序的目的是,用yy表与xx表匹配,也就是最终的结果应该是在xx的基础上增加b这一列的信息,数据集xx的行数不变。

go on

> library(data.table)> library(sqldf)> xx <- data.table(a1=1:6,c=c(8,5,8,6,23,7),d=c('adf','af','sdf','utr','af','ruti'))

> xx   a1  c    d1:  1  8  adf2:  2  5   af3:  3  8  sdf4:  4  6  utr5:  5 23   af6:  6  7 ruti

yy <- data.table(a1=c(2,3,1,4,5,5,7,6,8,9,2,2,3,6),b=c('b','c','a','d','e','e','g',                                                       'f','h','i','b','b','c','f'))

> yy    a1 b 1:  2 b 2:  3 c 3:  1 a 4:  4 d 5:  5 e 6:  5 e 7:  7 g 8:  6 f 9:  8 h10:  9 i11:  2 b12:  2 b13:  3 c14:  6 f

#按照a1连接所有信息包括进去 > dataxy<- merge(xx, yy, by = "a1", all.x = TRUE)> dataxy     a1  c    d b 1:  1  8  adf a 2:  2  5   af b 3:  2  5   af b 4:  2  5   af b 5:  3  8  sdf c 6:  3  8  sdf c 7:  4  6  utr d 8:  5 23   af e 9:  5 23   af e10:  6  7 ruti f11:  6  7 ruti f

#删除重复的行*/  > sqldf("select DISTINCT  a1,b,c,d from left1")  a1 b  c    d1  1 a  8  adf2  2 b  5   af3  3 c  8  sdf4  4 d  6  utr5  5 e 23   af6  6 f  7 ruti
OK ! That 's all .