[問題] 兩資料集merge,求解為何出現NA和解決之道
- 問題:
[問題類型]:
程式諮詢(我想用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
02/04 20:04, 1F
→
02/04 20:04, , 2F
02/04 20:04, 2F
→
02/04 21:05, , 3F
02/04 21:05, 3F
→
02/04 21:06, , 4F
02/04 21:06, 4F
→
02/04 21:08, , 5F
02/04 21:08, 5F
→
02/04 21:09, , 6F
02/04 21:09, 6F
→
02/04 21:11, , 7F
02/04 21:11, 7F
→
02/04 21:12, , 8F
02/04 21:12, 8F
→
02/04 21:15, , 9F
02/04 21:15, 9F
→
02/04 21:17, , 10F
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
02/04 21:38, 13F
→
02/04 21:41, , 14F
02/04 21:41, 14F

→
02/04 21:41, , 15F
02/04 21:41, 15F
→
02/04 21:42, , 16F
02/04 21:42, 16F
→
02/04 21:42, , 17F
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
02/05 02:01, 19F
→
02/05 02:01, , 20F
02/05 02:01, 20F

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

上圖第一個結果是 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
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章