R語言 : as.Date() 中的小陷阱, time zone

 在HR資料處理中,其中一個關鍵便是出勤資料了。,通常完整的資料除了上班打卡時間 / 下班打卡時間以外,通常還需要一個欄位,將打卡的時間歸類於幾月幾號的工時,

例如:
2022/10/28 23:00上班 / 2022/10/29 09:00下班,而歸屬日期為10/28

但現實也不免為碰到不完整的資料無法進行判別,因此需要透過打卡時間或者班別來推斷日期,於是便於其中一個打卡時間萃取日期出來,然後應用as.Date()轉換就完成萃取。

但我們都沒想到的是,單純的使用as.Date( ) 卻會因為系統時差轉換而和我們心中的理想日期有所誤差。

as.Date("yyyy-mm-dd hh:mm:ss",tz = Sys.timezone())
因此我們需要tz 函數來執行細節設定好讓我們確認時間能夠和預期相符。
在此直接列出使用範例:
CHECK <- Time %>% mutate(as_date = as.Date(PUNCH_TIME),
         as_date_Taiwan = as.Date(PUNCH_TIME,tz = "Asia/Taipei"),#台灣
as_date_Kolkata = as.Date(PUNCH_TIME,tz = "Asia/Kolkata"), #印度
DIFF = ifelse((as_date!=as_date_Taiwan| as_date!=as_date_Kolkata| as_date_Taiwan!=as_date_Kolkata),1,0)) %>% filter(DIFF ==1) CHECK %<>% filter(as_date_Taiwan != as_date_Kolkata) CHECK_INDIA %<>% select(PUNCH_TIME, as_date,as_date_Taiwan,as_date_Kolkata)
印度時間早台灣2.5小時,因此投一筆資料會直接將日期轉換為2022-09-01而非我們預想的2022-09-02,請參考下圖:


處理資料充滿小小細節,共勉之!





留言

這個網誌中的熱門文章

Word Vector & Word embedding 初探 - with n-Gram & GLOVE Model

文字探勘之關鍵字萃取 : TF-IDF , text-rank , RAKE

多元迴歸分析- subsets and shrinkage