[問題] 時間處裡 (strptime)

看板R_Language作者 (我搞砸了....)時間6年前 (2019/03/14 11:44), 6年前編輯推噓6(6022)
留言28則, 5人參與, 6年前最新討論串1/1
程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 新手(沒寫過程式,R 是我的第一次 [問題敘述]: 我把以下問題簡單化好了。 有一筆資料(txt檔,tab分隔) 19 Jan 19 15:40:00 19 Jan 19 15:41:30 (年月日分別各用一個column(縱向)紀錄) 我把資料讀入到R並將資料轉到 "time" object 結果會是: > time [1] "19 Jan 19 15:40:00" "19 Jan 19 15:41:30" strptime轉換格式 > time <- strptime(time, format='%d %b %g %H:%M:%S') > time [1] NA NA R就會如此無法處理 但若我先設置Sys.setlocale(LC_time) 就可以得到 > time <- strptime(time, tz="", format='%d %b %g %H:%M:%S') > time [1] "2019-01-19 15:40:00 CST" "2019-01-19 15:41:30 CST" 正常處理出需要的結果 現在的問題是,我要使用的package把strptime包在package的一連串程序裡面了。 執行指令後會出現error警告,我猜測是時間轉換會得到跟前面一樣 NA 的結果, 導致後續程序無法進行。 試過在執行package的指令前先設置Sys.setlocale(LC_time),一樣是會出現 Error警告。 由於我不會修改程式,所以我應該要如何做才能在不更動windows設定,讓 strptime正常運作。 ------ 目前我在使用R分析從記錄設備所獲得的紀錄資料,資料內容包含日期時間與紀錄。 得到的檔案為txt檔,tab分隔 日期的部分,年月日分別各用一個column(縱向)紀錄,時間總共是以一個column紀錄。 目前的問題是,當我用 "strptime"要將日期轉成 YYYY-MM-DD HH:mm:SS 的時候,R沒辦法正確處理,所以得到的檔案內容會變成 "NA" 。上網查發現有人指出 是時區(時間格式?)的問題,按照指示設定 "Sys.setlocale(LC_time)" 就可以正常 處理了。 現在我要使用另一個package進行分析,卡在一個要把A資料組轉成B資料組的步驟。 package的範例只需要下單一步指令就會自己跑,但是我會得到錯誤訊息,指出 D程式找不到時間資料。我上網查發現GitHub裡的D程式碼裡面包含"strptime"步驟,我 懷疑是一樣時間的問題造成。 我試過在執行指令前先照之前設定 "Sys.setlocale(LC_time)" 無效。 請問我可以如何在不動到windows本身設定下,解決時間設定的問題,或是設置參數, 讓package能夠正常地處理時間資料? 謝謝大大 [程式範例]: [環境敘述]: windows7 sp1 R-3.5.2 Rstudio-1.1.463 [關鍵字]: strptime -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.76.175.171 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1552535060.A.110.html

03/14 12:01, 6年前 , 1F
請提供明確的資料實例
03/14 12:01, 1F
※ 編輯: aklim (211.76.175.171), 03/14/2019 22:08:04 ※ 編輯: aklim (211.76.175.171), 03/14/2019 22:12:42

03/14 22:40, 6年前 , 2F
會出現NA是因為本機時間格式月份是中文顯示,而你的資料是
03/14 22:40, 2F

03/14 22:40, 6年前 , 3F
用Jan,所以才要用Sys.setlocale("LC_TIME","C")把他設成英
03/14 22:40, 3F

03/14 22:40, 6年前 , 4F
語系國家的顯示方式。這樣的處理方法應該沒有什麼問題,可
03/14 22:40, 4F

03/14 22:40, 6年前 , 5F
以分享你在用哪個package的fucntion嗎?搞不好根本不是strp
03/14 22:40, 5F

03/14 22:40, 6年前 , 6F
time的問題?
03/14 22:40, 6F

03/14 22:41, 6年前 , 7F
應該可用 lubridate::ymd_hms('19 Jan 19 15:40:00')?
03/14 22:41, 7F

03/14 23:05, 6年前 , 8F
請問原po,你說你用到的套件裡面有用到strptime(),那有看
03/14 23:05, 8F

03/14 23:05, 6年前 , 9F
過裡面 format 參數是什麼嗎?有沒有可能是你的資料("19 Ja
03/14 23:05, 9F

03/14 23:05, 6年前 , 10F
n 19 15:40:00")不符合他的格式所以餵進去才會沒辦法轉換
03/14 23:05, 10F

03/15 00:52, 6年前 , 11F
謝大大的回應,由於我使用的package,他設計功能就包含分析
03/15 00:52, 11F

03/15 00:54, 6年前 , 12F
我使用的紀錄系統的資料。package所提供的範本與我的資料
03/15 00:54, 12F

03/15 00:56, 6年前 , 13F
是一致的,我按說明步驟操作時就卡在資料轉換的過程中
03/15 00:56, 13F

03/15 01:01, 6年前 , 14F
我有看到lubridate,但資料不是我一步步處理,是package執
03/15 01:01, 14F

03/15 01:03, 6年前 , 15F
行的,所以我加掛lubridate應該也沒用,因為package,並不
03/15 01:03, 15F

03/15 01:03, 6年前 , 16F
是呼叫lubridate處裡日期
03/15 01:03, 16F

03/15 01:19, 6年前 , 17F
提供資料 跟 相關程式碼 不然只能猜而已
03/15 01:19, 17F

03/15 13:15, 6年前 , 18F
同意樓上c大~
03/15 13:15, 18F

03/15 13:16, 6年前 , 19F
其實不用猜,我試過改掉一台電腦的時間日期設定成美國,同
03/15 13:16, 19F

03/15 13:17, 6年前 , 20F
樣package的指令是可以正常完成的(同樣的檔案與指令順序),
03/15 13:17, 20F

03/15 13:19, 6年前 , 21F
所以我算是可以肯定是strptime無法運算造成的。在這狀況下
03/15 13:19, 21F

03/15 13:20, 6年前 , 22F
有辦法不改windows設定而達成嗎?
03/15 13:20, 22F

03/15 13:45, 6年前 , 23F
Sys.setlocale()這行指令就是在修改window時間格式設定了
03/15 13:45, 23F

03/15 15:46, 6年前 , 24F
請問這指令是直接改動windows的設定還是改動R環境的設定?
03/15 15:46, 24F

03/15 16:08, 6年前 , 25F
應該是 R 環境吧…可是 strptime 也是吃 R 環境設定,所以
03/15 16:08, 25F

03/15 16:08, 6年前 , 26F
照理說應該沒差 (有錯請指正) 如果真的要大家幫助的話,建
03/15 16:08, 26F

03/15 16:08, 6年前 , 27F
議還是po可重製錯誤的程式碼
03/15 16:08, 27F

03/17 03:36, 6年前 , 28F
了解了..謝謝大大的幫忙..
03/17 03:36, 28F
文章代碼(AID): #1SYSuK4G (R_Language)
文章代碼(AID): #1SYSuK4G (R_Language)