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

看板R_Language作者 (拒看低質媒體)時間10年前 (2014/07/11 05:50), 編輯推噓4(402)
留言6則, 4人參與, 最新討論串4/6 (看更多)
一般來說,合併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://www.ptt.cc/bbs/R_Language/M.1405029045.A.390.html

07/12 00:49, , 1F
可惜merge無法處理一次合併三個檔案?
07/12 00:49, 1F

07/12 03:53, , 2F
你可以兩個併一個,再併一個
07/12 03:53, 2F

07/12 03:53, , 3F
透過Reduce可以做出遞迴呼叫的效果
07/12 03:53, 3F

07/13 14:19, , 4F
了解 來試試看 謝謝!
07/13 14:19, 4F

08/02 22:00, , 5F
好用! 推一個!
08/02 22:00, 5F

07/09 15:04, , 6F
推!
07/09 15:04, 6F
文章代碼(AID): #1JlmgrEG (R_Language)
文章代碼(AID): #1JlmgrEG (R_Language)