Re: [問題] 多個檔案合併 取聯集

作者: Wush978 (拒看低質媒體)   2014-07-11 05:50:31
一般來說,合併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
: [程式範例]: 無
:
: 張貼能夠重現錯誤的程式碼,可以幫助版友更快的幫你解決問題
:
: [關鍵字]: 謝謝各位的幫忙。
:
: 選擇性,也許未來有用
:
作者: kenshin528 (成立奧凶帝國!!)   2014-07-12 00:49:00
可惜merge無法處理一次合併三個檔案?
作者: Wush978 (拒看低質媒體)   2014-07-12 03:53:00
你可以兩個併一個,再併一個透過Reduce可以做出遞迴呼叫的效果
作者: kenshin528 (成立奧凶帝國!!)   2014-07-13 14:19:00
了解 來試試看 謝謝!
作者: xsssxxzz (阿群)   2014-08-02 22:00:00
好用! 推一個!

Links booklink

Contact Us: admin [ a t ] ucptt.com