作者aklim (我搞砸了....)
看板R_Language
標題[問題] 時間處裡 (strptime)
時間Thu Mar 14 11:44:15 2019
程式諮詢(我想用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://webptt.com/m.aspx?n=bbs/R_Language/M.1552535060.A.110.html
1F:→ andrew43: 請提供明確的資料實例 03/14 12:01
※ 編輯: aklim (211.76.175.171), 03/14/2019 22:08:04
※ 編輯: aklim (211.76.175.171), 03/14/2019 22:12:42
2F:推 locka: 會出現NA是因為本機時間格式月份是中文顯示,而你的資料是 03/14 22:40
3F:→ locka: 用Jan,所以才要用Sys.setlocale("LC_TIME","C")把他設成英 03/14 22:40
4F:→ locka: 語系國家的顯示方式。這樣的處理方法應該沒有什麼問題,可 03/14 22:40
5F:→ locka: 以分享你在用哪個package的fucntion嗎?搞不好根本不是strp 03/14 22:40
6F:→ locka: time的問題? 03/14 22:40
7F:推 cywhale: 應該可用 lubridate::ymd_hms('19 Jan 19 15:40:00')? 03/14 22:41
8F:推 locka: 請問原po,你說你用到的套件裡面有用到strptime(),那有看 03/14 23:05
9F:→ locka: 過裡面 format 參數是什麼嗎?有沒有可能是你的資料("19 Ja 03/14 23:05
10F:→ locka: n 19 15:40:00")不符合他的格式所以餵進去才會沒辦法轉換 03/14 23:05
11F:→ aklim: 謝大大的回應,由於我使用的package,他設計功能就包含分析 03/15 00:52
12F:→ aklim: 我使用的紀錄系統的資料。package所提供的範本與我的資料 03/15 00:54
13F:→ aklim: 是一致的,我按說明步驟操作時就卡在資料轉換的過程中 03/15 00:56
14F:→ aklim: 我有看到lubridate,但資料不是我一步步處理,是package執 03/15 01:01
15F:→ aklim: 行的,所以我加掛lubridate應該也沒用,因為package,並不 03/15 01:03
16F:→ aklim: 是呼叫lubridate處裡日期 03/15 01:03
17F:→ celestialgod: 提供資料 跟 相關程式碼 不然只能猜而已 03/15 01:19
18F:推 locka: 同意樓上c大~ 03/15 13:15
19F:→ aklim: 其實不用猜,我試過改掉一台電腦的時間日期設定成美國,同 03/15 13:16
20F:→ aklim: 樣package的指令是可以正常完成的(同樣的檔案與指令順序), 03/15 13:17
21F:→ aklim: 所以我算是可以肯定是strptime無法運算造成的。在這狀況下 03/15 13:19
22F:→ aklim: 有辦法不改windows設定而達成嗎? 03/15 13:20
23F:推 locka: Sys.setlocale()這行指令就是在修改window時間格式設定了 03/15 13:45
24F:→ aklim: 請問這指令是直接改動windows的設定還是改動R環境的設定? 03/15 15:46
25F:推 locka: 應該是 R 環境吧…可是 strptime 也是吃 R 環境設定,所以 03/15 16:08
26F:→ locka: 照理說應該沒差 (有錯請指正) 如果真的要大家幫助的話,建 03/15 16:08
27F:→ locka: 議還是po可重製錯誤的程式碼 03/15 16:08
28F:→ aklim: 了解了..謝謝大大的幫忙.. 03/17 03:36