У меня есть два файла, которые содержат значения in_time и out_time сотрудника, которые мне нужны, чтобы узнать время в офисе, как я могу это сделать в программировании на R? - PullRequest
0 голосов
/ 25 августа 2018

введите код здесь

in_time <- read.csv('in_time.csv', stringsAsFactors = F)
out_time <- read.csv('out_time.csv', stringsAsFactors = F)

 for(i in 2:length(colnames(in_time)) ) {
  in_time[i] <- strptime(in_time[i], format="%d-%m-%Y %H:%M")
}

for(i in 2:length(colnames(out_time)) ) {  
  out_time[i] <- strptime(out_time[i], format="%d-%m-%Y %H:%M")
}

#time_difference
for(i in 2:length(colnames(out_time)) ) {
time_in_office[i] <- out_time[i] - in_time[i]
}

Я не могу получить разницу во времени. Файлы in_time и out_time содержат значения даты и времени, кроме первого столбца

1 Ответ

0 голосов
/ 13 сентября 2018

Вы можете использовать пакет lubridate для расчета временных разниц входных и выходных событий.Чтобы рассчитать разницу во времени для in_time и out_time, вы можете использовать функцию mapply.Пожалуйста, смотрите код ниже:

in_time <- structure(list(EmployeeID = 1:3, X02.01.2015 = c("02-01-2015 09:43", 
"02-01-2015 10:15", "02-01-2015 10:17"), X05.01.2015 = c("05-01-2015 10:08", 
"05-01-2015 10:21", "05-01-2015 09:50"), X06.01.2015 = c("06-01-2015 09:54", 
"07-01-2015 09:45", "06-01-2015 10:14"), X07.01.2015 = c("07-01-2015 09:34", 
NA, NA)), class = "data.frame", row.names = c(NA, -3L))

out_time <- structure(list(EmployeeID = c(1, 2, 3), X02.01.2015 = c("02-01-2015 19:43", 
"02-01-2015 18:15", "02-01-2015 17:17"), X05.01.2015 = c("05-01-2015 15:02", 
"05-01-2015 12:11", "05-01-2015 21:50"), X06.01.2015 = c("06-01-2015 16:34", 
"07-01-2015 19:45", "06-01-2015 18:14"), X07.01.2015 = c("07-01-2015 21:34", 
"NA", "NA")), row.names = c(NA, 3L), class = "data.frame")

library(lubridate)
# converse date\time into POSIXct format
in_time[, -1] <- lapply(in_time[, -1], dmy_hm)
out_time[, -1] <- lapply(out_time[, -1], dmy_hm)

# calculate time difference
result <- in_time
result[, -1] <- mapply(function(x, y) {
  mapply(function(x, y) as.numeric(as.period(interval(x, y)), unit = "hours"), x, y)
}, in_time[,-1], out_time[,-1])

result

Вывод: количество времени, которое сотрудник провел на работе, в часах:

  EmployeeID X02.01.2015 X05.01.2015 X06.01.2015 X07.01.2015
1          1          10    4.900000    6.666667          12
2          2           8    1.833333   10.000000          NA
3          3           7   12.000000    8.000000          NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...