看板 R_Language 關於我們 聯絡資訊
- 問題: 當你想要問問題時,請使用這個類別。 [問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 入門(寫過其他程式,只是對語法不熟悉) *[m [問題敘述]: 如題,解壓縮出來之後時間欄位竟然有小數點... 快被搞死了,試過用記事本把".000"刪掉,但是行不通所以只能上來求救了 資料大概長得像以下那副鬼德性: ( Time, Leave, UniqueBusID 為原始資料欄位) (rid與qid為新增欄位) Time Leave UniqueBusID rid qid 2015-01-01 13:36:50.000 False 屯區藝文中心->莒光新城163 1 2 2015-01-01 13:36:56.000 True 屯區藝文中心->莒光新城163 2 2 2015-01-01 13:37:28.000 False 屯區藝文中心->莒光新城163 3 2 2015-01-01 13:37:38.000 False 屯區藝文中心->莒光新城163 4 2 2015-01-01 13:38:43.000 False 屯區藝文中心->莒光新城163 5 2 2015-01-01 13:37:53.000 True 莒光新城->屯區藝文中心164 1 1 2015-01-01 13:38:19.000 False 莒光新城->屯區藝文中心164 2 1 2015-01-01 13:38:38.000 False 莒光新城->屯區藝文中心164 3 1 2015-01-01 13:38:58.000 False 莒光新城->屯區藝文中心164 4 1 2015-01-01 13:39:10.000 False 莒光新城->屯區藝文中心164 5 1 我要做的事情是跟之前一樣,依據UniqueBusID分類 並選取同樣UniqueBusID的第一筆Leave==True資料,新增rid和qid進行編碼 rid為同樣UniqueBusID的資料(照時間排序) qid為同樣UniqueBusID的第一筆Leave==True資料 之前問過類似的問題,附上程式碼如下 UniqueBusID_Select <- BusData %>% # 輸入並鎖定路線往返程起點 .[grep("莒光新城->\\d*|屯區藝文中心->\\d*", .$UniqueBusID)] %>% .[,c("rid","qid"):=list(.I, .I[which(Leave==TRUE)][1L]), by=.(UniqueBusID)] 到這邊都沒問題,時間有正確讀入UniqueBusID_Select(包括小數點) 新增的欄位rid和qid亦遵循我定下的規則完成編碼的動作 接著就是鬼開始鬼打牆了: UniqueBusID_Select[,Time:= as.POSIXct(strptime(Time, "%Y/%m/%d %H:%M:%S.000")) )] 如上式,我要把年月日時分秒讀入,透過strptime和as.POSIXct處理之後 存成新的欄位Time,但這個步驟不管怎麼試都行不通 跑出來的UniqueBusID_Select通通顯示NA 換了好幾個方法通通都不管用,請求各位大大協助突破..感謝! [程式範例]: [環境敘述]: [關鍵字]: as.POSIXct strptime -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.138.62.223 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1485720358.A.71B.html ※ 編輯: joson4921 (223.138.62.223), 01/30/2017 04:08:13 ※ 編輯: joson4921 (223.138.62.223), 01/30/2017 04:18:31
joson4921: 補充,資料量為150萬筆左右,我自己有測試同樣都是時 01/30 08:47
joson4921: 間欄位刪除小數點的資料,<104857筆的可以,超過就不 01/30 08:47
joson4921: 行,不知道跟這個有沒有關係 01/30 08:47
clansoda: gsub? 01/30 09:13
cywhale: gsub can work,and as.POSIXct("2015-01-01 13:36:50.000 01/30 10:14
cywhale: should also work in data.table.. or also try Dirk's 01/30 10:15
cywhale: package anytime("your time") https://goo.gl/mtE5IO 01/30 10:17
clansoda: That's cool. I do not consider anytime even though 01/30 12:17
clansoda: I know this package already. 01/30 12:17
celestialgod: strptime(DT$Time, "%Y-%m-%d %H:%M:%OS") 01/30 14:10
celestialgod: concern速度就用 lubridate::fast_strptime 01/30 14:11
celestialgod: http://pastebin.com/bGVA0ZNi 01/30 14:13
celestialgod: fast_strptime不加lt=FALSE,data.table會無法正確 01/30 14:14
celestialgod: 儲存 01/30 14:14
joson4921: 謝謝c大還有樓上幾位大大提供建議,fast_strptime真的快 01/31 01:50
joson4921: 非常多,c大最先窩的%OS的用法之前有查到但一樣解不了, 01/31 01:51
joson4921: 最後改用fast_strptime終於解決了,大感謝!!!! 01/31 01:52
joson4921: 最先說的%OS 01/31 01:52