R: Расчет общего количества часов по дате и времени - PullRequest
0 голосов
/ 03 октября 2018

Первый вопрос и новость для R.

Я извлекаю данные с сервера SQL и помещаю их в таблицу данных R (SAP).Я пытаюсь рассчитать общее количество часов из 4 столбцов (StartDate, FinDate, StartTime, FinTime).

DataTable

Я пытался рассчитать на основе данных (SAP), но не получил то, что я хочу.

SAP$hours <- with(SAP,
                  difftime(c(ActStartDate, ActStartTime), 
                           c(ActFinDate, ActFinTime),
                           units = "hours") )    

Iхотел бы, чтобы общее количество часов добавлялось в таблицу данных или вектор, назначающий общее количество часов.

Вот как я бы поступил в Excel:

Часы = ((End_Date + End_Time) - (Start_Date + Start_Time)) * 24

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Спасибо всем.Я закончил тем, что делал это с твоим участием, и это сработало

    # 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")]    
0 голосов
/ 03 октября 2018

Вы можете сделать что-то вроде этого:

#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")
...