作者Wush978 (拒看低质媒体)
看板R_Language
标题Re: [问题] 多个档案合并 取联集
时间Fri Jul 11 05:50:31 2014
一般来说,合并data.frame(Table)有以下数种方法:
- Outer Join, 就是你所谓的取联集
- Inner Join, 取交集
- Left Outer Join
- Right Outer Join
- Cross Join
在R中,都可以透过merge指令简单完成
以下是一个简单的Demo
```r
file_1 <- data.frame(
name = c("A", "B", "D"),
day1 = c(23, 45, 100))
file_2 <- data.frame(
name = c("A", "C", "D"),
day2 = c(77, 11, 35))
# inner join
# 只取交集
merge(x = file_1, y = file_2, by = "name")
```
```
## name day1 day2
## 1 A 23 77
## 2 D 100 35
```
```r
# outer join
# 取联集
merge(x = file_1, y = file_2, by = "name", all = TRUE)
```
```
## name day1 day2
## 1 A 23 77
## 2 B 45 NA
## 3 D 100 35
## 4 C NA 11
```
```r
# left outer join
# 把y 贴到 x
merge(x = file_1, y = file_2, by = "name", all.x = TRUE)
```
```
## name day1 day2
## 1 A 23 77
## 2 B 45 NA
## 3 D 100 35
```
```r
# right outer join
# 把x 贴到 y
merge(x = file_1, y = file_2, by = "name", all.y = TRUE)
```
```
## name day1 day2
## 1 A 23 77
## 2 D 100 35
## 3 C NA 11
```
```r
# cross join
# 展开所有可能的组合
merge(x = file_1, y = file_2, by = NULL)
```
```
## name.x day1 name.y day2
## 1 A 23 A 77
## 2 B 45 A 77
## 3 D 100 A 77
## 4 A 23 C 11
## 5 B 45 C 11
## 6 D 100 C 11
## 7 A 23 D 35
## 8 B 45 D 35
## 9 D 100 D 35
```
FYI
ps. reference:
http://stackoverflow.com/questions/1299871/how-to-join-data-frames-in-r-inner-outer-left-right
※ 引述《iterate (碎形)》之铭言:
:
: ctrl + y 可以删除一整行,请将不需要的内容删除
: 文章分类提示:
: - 问题: 多个档案合并时,取联集。范例如下。
:
: [问题类型]:
:
: 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
:
: [软体熟悉度]:
: 请把以下不需要的部份删除
: 入门(写过其他程式,只是对语法不熟悉)
: [问题叙述]:
: 请简略描述你所要做的事情,或是这个程式的目的
: file_1:
: day1
: A 23
: B 45
: D 100
: file_2:
: day2
: A 77
: C 11
: D 35
: file_3:
: day3
: B 11
: D 44
: E 55
: 希望能合并成下表:
: day1 day2 day3
: A 23 77 0
: B 45 0 11
: C 0 11 0
: D 100 35 44
: E 0 0 55
: [程式范例]: 无
:
: 张贴能够重现错误的程式码,可以帮助版友更快的帮你解决问题
:
: [关键字]: 谢谢各位的帮忙。
:
: 选择性,也许未来有用
:
--
欢迎到ptt R_Language版分享R 的相关知识
欢迎加入 Taiwan R User Group :
http://www.facebook.com/Tw.R.User
聚会报名
http://www.meetup.com/Taiwan-R/
聚会影片
https://www.youtube.com/user/TWuseRGroup
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 46.115.27.241
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/R_Language/M.1405029045.A.390.html
1F:推 kenshin528:可惜merge无法处理一次合并三个档案? 07/12 00:49
2F:→ Wush978:你可以两个并一个,再并一个 07/12 03:53
3F:→ Wush978:透过Reduce可以做出递回呼叫的效果 07/12 03:53
4F:推 kenshin528:了解 来试试看 谢谢! 07/13 14:19
5F:推 xsssxxzz:好用! 推一个! 08/02 22:00
6F:推 yaowei2010: 推! 07/09 15:04