簡體   English   中英

使用R查找兩個數據幀之間的時間差

[英]Finding difference in time between two data frames using R

我有兩個數據框,一個是員工的入職時間,另一個是員工的外出時間。兩個數據框中的數據都包含最近一年中約4000名員工的時間戳(不包括周末/公共假期日期)。每個數據幀有4000行和250列。我想找到一個員工每天在工作上花費的小時數,基本上我的方法是使用difftime()函數查找兩個數據幀之間的時間差。使用下面的代碼,並期望得到的結果數據幀包含4000行和250列,但它們之間存在時間差異,但是將數據返回到一列中。我應該如何處理此問題,以便獲得兩個數據之間的時間差具有4000行和250列的數據幀格式的幀?

hours_spent <- as.data.frame(as.matrix(difftime(as.matrix(out_time_data_hrs),as.matrix(in_time_data_hrs),unit='hour')))

輸入數據如下所示,

准時數據幀

在此處輸入圖片說明

Out_time數據幀

在此處輸入圖片說明

預期產量

在此處輸入圖片說明

這是一個基於您發布的數據和可能的解決方案的小而簡單的示例:

# example data in_times
df1 = data.frame(`2018-08-01` = c("2018-08-01 10:30:00", "2018-08-01 10:25:00"),
                 `2018-08-02` = c("2018-08-02 10:20:00", "2018-08-02 10:45:00"))
# example data out_times
df2 = data.frame(`2018-08-01` = c("2018-08-01 17:33:00", "2018-08-01 18:06:00"),
                 `2018-08-02` = c("2018-08-02 17:11:00", "2018-08-02 17:45:00"))

library(tidyverse)

# reshape datasets
df1_resh = df1 %>%
  mutate(empl_id = row_number()) %>%   # add an employee id (using the row number)
  gather(day, in_time, -empl_id)       # reshape dataset

df2_resh = df2 %>%
  mutate(empl_id = row_number()) %>%
  gather(day, out_time, -empl_id)

# join datasets and calculate hours spent
left_join(df1_resh, df2_resh, by=c("empl_id","day")) %>%
  mutate(hours_spent = difftime(out_time, in_time))

#   empl_id         day             in_time            out_time    hours_spent
# 1       1 X2018.08.01 2018-08-01 10:30:00 2018-08-01 17:33:00 7.050000 hours
# 2       2 X2018.08.01 2018-08-01 10:25:00 2018-08-01 18:06:00 7.683333 hours
# 3       1 X2018.08.02 2018-08-02 10:20:00 2018-08-02 17:11:00 6.850000 hours
# 4       2 X2018.08.02 2018-08-02 10:45:00 2018-08-02 17:45:00 7.000000 hours

如果要重新調整為初始格式,可以將其用作最后的代碼:

left_join(df1_resh, df2_resh, by=c("empl_id","day")) %>%
  mutate(hours_spent = difftime(out_time, in_time)) %>%
  select(empl_id, day, hours_spent) %>%
  spread(day, hours_spent)

#   empl_id    X2018.08.01 X2018.08.02
# 1       1 7.050000 hours  6.85 hours
# 2       2 7.683333 hours  7.00 hours

我的要求可以滿足,只需做下面的事情就可以了

employee_hrs_df <- out_time_data - in_time_data

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM