作者joson4921 (特務)
看板R_Language
標題[問題] 時間欄位有小數點,strptime取值顯示NA
時間Mon Jan 30 04:05:54 2017
- 問題: 當你想要問問題時,請使用這個類別。
[問題類型]:
程式諮詢(我想用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
→ 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: 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