[問題] 兩資料集merge,求解為何出現NA和解決之道

看板R_Language作者 (特務)時間8年前 (2017/02/04 18:01), 8年前編輯推噓0(0029)
留言29則, 3人參與, 最新討論串1/1
- 問題: [問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 入門(寫過其他程式,只是對語法不熟悉) [問題敘述]:      BaseLine.csv:https://goo.gl/Zdq00K TmpCalcuBusNo._V0.csv:https://goo.gl/SWmaUh 如題,手邊有兩個經過整理的資料集「BaseLine.csv」「TmpCalcuBusNo._V0.csv」 兩資料集內分別有4個相同的欄位名稱: Gobackx, From, Toward, Bus_No 我想把「BaseLine.csv」的「Tmp_TravelTime」欄位資料merge過去TmpCal那個csv 然後另存成新資料集「TimeCalcu_temp」,所使用的程式碼如下: TimeCalcu_temp <- merge( TmpCalcu_BusNo._V0, BaseLine, by = c("Gobackx","Toward","From","Bus_No") ,all.x = TRUE) 檔案是有照我想要的方式merge起來了,如新資料集第一筆所示: Gobackx Toward From Bus_No => Tmp_TravelTime 0 五權學士路口 莒光新城 12 => 27 回頭去找「BaseLine.csv」確認, 根據上述 Gobackx, Toward, From, Bus_No找到對應資料:BaseLine.csv第854筆 該筆資料之 Tmp_TravelTime = 27 無誤 但是可以發現另存成的新資料集 TimeCalcu_temp 的 Tmp_TravelTime 出現大量NA值 我想知道是否 merge 函數使用有誤,致無法得出我想要的結果呢? 還請板上大大協助run一下資料集看看問題出在哪裡,先謝謝大家了!!!! [程式範例]: [環境敘述]: 請提供 sessionInfo() 的輸出結果, 裡面含有所有你使用的作業系統、R 的版本和套件版本資訊, 讓版友更容易找出錯誤 [關鍵字]: merge 選擇性,也許未來有用 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.136.217 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1486202506.A.4DF.html ※ 編輯: joson4921 (140.113.136.217), 02/04/2017 18:04:33

02/04 20:04, , 1F
all.x = TRUE 出錯吧
02/04 20:04, 1F

02/04 20:04, , 2F
你保留全部的左表,沒有mapping到的當然是NA
02/04 20:04, 2F

02/04 21:05, , 3F
不是這樣的,以新建的資料集第4874筆來說,該筆資料Gobac
02/04 21:05, 3F

02/04 21:06, , 4F
Gobackx=0,Toward=大東紡織(振興路),From=莒光新城,
02/04 21:06, 4F

02/04 21:08, , 5F
Bus_No=3,根據這些資料去找BaseLine是可以找到對應的
02/04 21:08, 5F

02/04 21:09, , 6F
Tmp_TravelTime=1723,而且仔細一看會發現BaseLine裡面
02/04 21:09, 6F

02/04 21:11, , 7F
當Gobackx=0,From=莒光新城,Toward=大東紡織(振興路)時
02/04 21:11, 7F

02/04 21:12, , 8F
Bus_No欄位=3~62都有資料,但新增的資料集裡面全是NA
02/04 21:12, 8F

02/04 21:15, , 9F
我也搞不懂為什麼會這樣,左表map出來17.4萬筆資料裡面
02/04 21:15, 9F

02/04 21:17, , 10F
有9萬筆資料是NA...而且隨便抓都是BaseLine有的資料,又
02/04 21:17, 10F

02/04 21:18, , 11F
不是不存在的資料,真的很抱歉再麻煩板上大大看看哪裡出
02/04 21:18, 11F

02/04 21:18, , 12F
問題,拜託了!!謝謝!!
02/04 21:18, 12F

02/04 21:38, , 13F
http://imgur.com/a/vAavf 我讀起來是正常的阿
02/04 21:38, 13F

02/04 21:41, , 14F
看起來也沒naY
02/04 21:41, 14F

02/04 21:41, , 15F
Y是多打得
02/04 21:41, 15F

02/04 21:42, , 16F
Note: 我的data.table是 1.10.1
02/04 21:42, 16F

02/04 21:42, , 17F
R是MRO 3.3.1,windows 10 64bit
02/04 21:42, 17F

02/04 23:34, , 18F
了解…待會再確認看看版本有沒有影響@@
02/04 23:34, 18F
見鬼了... http://imgur.com/IJ25uLX
下面是用我原本的程式去讀 TmpCalcu_BusNo._V0, BaseLine 這兩個資料集 上面是仿照c大的直接讀取我傳給c大的csv 明明都是那兩個data.table的東西 為什麼c大讀我輸出的csv就可以,結果我自己直接讀的就不行 ... ...所以我就敲了class()進去試,結果 http://imgur.com/C2lryP7
c大輸入用的DT2跟DT1是同樣的格式: > class(DT2) [1] "data.table" "data.frame" > class(DT1) [1] "data.table" "data.frame" 我的 TmpCalcu_BusNo._V0 跟 BaseLine 的格式是: > class(TmpCalcu_BusNo._V0) [1] "data.table" "data.frame" > class(BaseLine) [1] "grouped_df" "tbl_df" "tbl" "data.frame" 所以問題是出在格式不對嗎-.- 然後剛剛試著用as.data.frame(BaseLine)去轉,可是class()出來發現格式沒有變 ...所以是我的BaseLine產生過程有問題嗎? 附上BaseLine產生的程式碼如下: http://imgur.com/qrP8Ntq
救命... ※ 編輯: joson4921 (1.161.166.207), 02/05/2017 01:01:58 ※ 編輯: joson4921 (1.161.166.207), 02/05/2017 01:02:38

02/05 02:01, , 19F
用 as.data.frame 或直接 class(BaseLine) <- "data.fram
02/05 02:01, 19F

02/05 02:01, , 20F
e" 看看呢?
02/05 02:01, 20F
http://imgur.com/aBkpMic
有試著用W大的方法去改了,指定進去之後BaseLine確實變成了"data.frame" 但後面merge起來的結果並沒有因此改變,無法做到先把資料輸出成csv再讀入一樣的結果 ...我只剩下輸出成csv再讀入做後續運算這條路了嗎-.-||| ※ 編輯: joson4921 (1.161.166.207), 02/05/2017 02:35:20

02/05 02:43, , 21F
BaseLine <- as.data.table(BaseLine) ?
02/05 02:43, 21F

02/05 02:44, , 22F
我猜問題是因為是merge.data.table跟
02/05 02:44, 22F

02/05 02:44, , 23F
merge.data.frame這兩個method有一些不同
02/05 02:44, 23F

02/05 02:44, , 24F
所以沒辦法完全相容,在某些點上出問題了
02/05 02:44, 24F

02/05 02:44, , 25F
先試試看都轉成data.table看看吧
02/05 02:44, 25F

02/05 02:44, , 26F
或是 直接用 setDT(BaseLine)
02/05 02:44, 26F

02/05 02:45, , 27F
然後再試一次
02/05 02:45, 27F
http://imgur.com/hDUlltU
上圖第一個結果是 BaseLine <- as.data.table(BaseLine) 第二個結果是 BaseLine <- setDT(BaseLine) 兩個都轉成 [1] "data.table" "data.frame" 了,但程式跑出來還是存在NA 0.0 ※ 編輯: joson4921 (140.113.136.220), 02/05/2017 11:58:50

02/05 14:28, , 28F
暫時就先輸出再讀入吧,雖然我還是不了解哪邊出了問題@@
02/05 14:28, 28F

02/05 14:28, , 29F
謝謝樓上大大們出手協助,謝謝!!
02/05 14:28, 29F
文章代碼(AID): #1ObQQAJV (R_Language)
文章代碼(AID): #1ObQQAJV (R_Language)