一般来说,合并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
: [程式范例]: 无
:
: 张贴能够重现错误的程式码,可以帮助版友更快的帮你解决问题
:
: [关键字]: 谢谢各位的帮忙。
:
: 选择性,也许未来有用
: