[問題] 時間欄位有小數點,strptime取值顯示NA

看板R_Language作者 (特務)時間8年前 (2017/01/30 04:05), 8年前編輯推噓0(0018)
留言18則, 4人參與, 最新討論串1/1
- 問題: 當你想要問問題時,請使用這個類別。 [問題類型]: 程式諮詢(我想用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

01/30 08:47, , 1F
補充,資料量為150萬筆左右,我自己有測試同樣都是時
01/30 08:47, 1F

01/30 08:47, , 2F
間欄位刪除小數點的資料,<104857筆的可以,超過就不
01/30 08:47, 2F

01/30 08:47, , 3F
行,不知道跟這個有沒有關係
01/30 08:47, 3F

01/30 09:13, , 4F
gsub?
01/30 09:13, 4F

01/30 10:14, , 5F
gsub can work,and as.POSIXct("2015-01-01 13:36:50.000
01/30 10:14, 5F

01/30 10:15, , 6F
should also work in data.table.. or also try Dirk's
01/30 10:15, 6F

01/30 10:17, , 7F
package anytime("your time") https://goo.gl/mtE5IO
01/30 10:17, 7F

01/30 12:17, , 8F
That's cool. I do not consider anytime even though
01/30 12:17, 8F

01/30 12:17, , 9F
I know this package already.
01/30 12:17, 9F

01/30 14:10, , 10F
strptime(DT$Time, "%Y-%m-%d %H:%M:%OS")
01/30 14:10, 10F

01/30 14:11, , 11F
concern速度就用 lubridate::fast_strptime
01/30 14:11, 11F

01/30 14:13, , 12F

01/30 14:14, , 13F
fast_strptime不加lt=FALSE,data.table會無法正確
01/30 14:14, 13F

01/30 14:14, , 14F
儲存
01/30 14:14, 14F

01/31 01:50, , 15F
謝謝c大還有樓上幾位大大提供建議,fast_strptime真的快
01/31 01:50, 15F

01/31 01:51, , 16F
非常多,c大最先窩的%OS的用法之前有查到但一樣解不了,
01/31 01:51, 16F

01/31 01:52, , 17F
最後改用fast_strptime終於解決了,大感謝!!!!
01/31 01:52, 17F

01/31 01:52, , 18F
最先說的%OS
01/31 01:52, 18F
文章代碼(AID): #1OZaicSR (R_Language)
文章代碼(AID): #1OZaicSR (R_Language)