R: Расчет общего количества часов по дате и времени
Первый вопрос и новый для Р.
Я извлекаю данные с сервера SQL и помещаю в таблицу данных R (SAP). Я пытаюсь рассчитать общее количество часов из 4 столбцов (StartDate, FinDate, StartTime, FinTime).
Я пытался это рассчитать на основе данных (SAP), но не получая, что я хочу.
SAP$hours <- with(SAP,
difftime(c(ActStartDate, ActStartTime),
c(ActFinDate, ActFinTime),
units = "hours") )
Я хотел бы, чтобы общее количество часов добавлялось в таблицу данных или вектор, назначающий общее количество часов.
Вот как я бы сделал в Excel:
Часы = ((End_Date+End_Time)-(Start_Date+Start_Time))*24
2 ответа
Вы могли бы сделать что-то вроде этого:
#sample data:
df <- data.frame(startdate = c("2018-08-23 00.00.00"),
enddate = c("2018-08-24 00.00.00"),
starttime = c("23:00:00"),
endtime = c("23:30:00"))
#This will first combine date(after extracting the date part) and time and
#then convert it to a date time object readable by R.
df$sdt <- as.POSIXct(paste(substr(df$startdate, 1, 10),
df$starttime,
sep = " "),
format = "%Y-%m-%d %H:%M:%S")
#Same for end date time
df$edt <- as.POSIXct(paste(substr(df$enddate, 1, 10),
df$endtime,
sep = " "),
format = "%Y-%m-%d %H:%M:%S")
df$diff <- difftime(df$edt, df$sdt, units = "hours")
Спасибо вам всем. Я закончил тем, что делал это с твоим участием, и это сработало.
# make it a data table
SAP <- data.table(SAP)
# only select some columns of interest
SAP <- SAP[, .(Equipment, Order, ActStartDate, ActStartTime, ActFinDate, ActFinTime)]
# generate start / end as POSIX,
# this code assumes that start date from SAP is always like 2018-05-05
# so 10 chars as YYYY-MM-DD
# if needed add time zone information, e.g as.POSIXct(..., tz = 'UTC')
SAP[, start := as.POSIXct(paste0(substring(ActStartDate, 1, 10), ActStartTime))]
SAP[, end := as.POSIXct(paste0(substring(ActFinDate, 1, 10), ActFinTime))]
# calculate duration
SAP[, duration := difftime(end, start, units = "hours")]