楼主: 李会超
2858 2

[学习分享] 关于R中表的合并(转载) [推广有奖]

  • 1关注
  • 31粉丝

已卖:1166份资源

教授

33%

还不是VIP/贵宾

-

威望
0
论坛币
121239 个
通用积分
62.0400
学术水平
140 点
热心指数
152 点
信用等级
84 点
经验
56173 点
帖子
1180
精华
1
在线时间
1120 小时
注册时间
2008-11-6
最后登录
2024-4-29

楼主
李会超 发表于 2014-12-29 13:54:43 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
今天看到一篇不错的帖子,转载如下:
R中的表合并
一、merge函数外连接合并)

>merge(x = df1, y = df2, by = "CustomerId", all = TRUE)

CustomerId Product   State

1         1 Toaster    <NA>

2         2 Toaster Alabama

3         3 Toaster    <NA>

4         4   Radio Alabama

5         5   Radio    <NA>

6         6   Radio    Ohio

左连接:

merge(x = df1, y = df2, by ="CustomerId", all.x=TRUE)

CustomerId Product   State

1         1 Toaster    <NA>

2         2 Toaster Alabama

3         3 Toaster    <NA>

4         4   Radio Alabama

5         5   Radio    <NA>

6         6   Radio    Ohio

右连接:

> merge(x = df1, y = df2, by ="CustomerId", all.y=TRUE)

CustomerId Product   State

1         2 Toaster Alabama

2         4   Radio Alabama

3         6   Radio    Ohio



交叉连接:

> merge(x = df1, y = df2, by = NULL)

  CustomerId.x Product CustomerId.y  State

1             1 Toaster            2 Alabama

2             2 Toaster            2 Alabama

3             3 Toaster            2 Alabama

4             4  Radio            2 Alabama

5             5  Radio            2 Alabama

6             6  Radio            2 Alabama

7             1 Toaster            4 Alabama

8             2 Toaster            4 Alabama

9             3 Toaster            4 Alabama

10            4  Radio            4 Alabama

11            5  Radio            4 Alabama

12            6  Radio            4 Alabama

13           1 Toaster            6   Ohio

14            2 Toaster            6   Ohio

15            3 Toaster            6   Ohio

16            4  Radio            6    Ohio

17            5  Radio            6    Ohio

18            6  Radio            6    Ohio


使用sqldf包查询合并表

##习惯使用sql的童鞋是不是有种他乡遇故知的赶脚

##egsqldf("SELECT *FROM df1 where CUstomerId=2"

CustomerId Product

1         2 Toaster


内连接:

sqldf("SELECT CustomerId, Product,State FROM df1 JOIN df2 USING(CustomerID)"

CustomerId Product   State

1         2 Toaster Alabama

2         4   Radio Alabama

3         6   Radio    Ohio

左连接:

sqldf("SELECT CustomerId, Product,State  FROM df1 LEFT JOIN df2USING(CustomerID)"

CustomerId Product   State

1         1 Toaster    <NA>

2         2 Toaster Alabama

3          3 Toaster    <NA>

4         4   Radio Alabama

5         5   Radio    <NA>

6         6   Radio    Ohio


三、使用plyr

library(plyr)


join(df1, df2,type="inner"

CustomerId Product   State

1         2 Toaster Alabama

2         4   Radio Alabama

3          6  Radio    Ohio

Type的选项包括:innerleftrightfull(内连接,左连接,右连接,外连接)


四、使用dplyr

library(dplyr)

> inner_join(df1,df2,by="CustomerId"

CustomerId Product   State

1         2 Toaster Alabama

2         4   Radio Alabama

3         6   Radio    Ohio

> left_join(df1,df2)

Joining by: "CustomerId"

CustomerId Product   State

1         1 Toaster    <NA>

2         2 Toaster Alabama

3         3 Toaster    <NA>

4         4   Radio Alabama

5         5   Radio    <NA>

6         6   Radio    Ohio

> semi_join(df1,df2)

Joining by: "CustomerId"

CustomerId Product

1         2 Toaster

2         4   Radio

3         6   Radio

> anti_join(df1,df2)

CustomerId Product

1         1 Toaster

2         3 Toaster

3         5   Radio


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:left join Customer Alabama Product Library

学无止境,坚持!

沙发
luoyouma 发表于 2015-1-1 18:05:35
赞,最近在学习这个。

藤椅
shuishoufighter 发表于 2015-1-3 22:49:48
不错的帖子,最近正在学习这个

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-21 22:47