我正在使用此代码从两个POSIXct日期获得数小时的差异。
x <- transform(x, HRS = ceiling(as.numeric(SHIP_DATE-PICK_DATE)))
这可以得到准确的结果。但是,当我试图找到另一个类似列的小时差异时,我需要这样做:
x <- transform(x, HRS_ADJ = ceiling(as.numeric(SHIP_DATE-ADJ_PICK_DATE)/60))
PICK_DATE&amp; SHIP_DATE使用相同的公式提取。
x$SHIP_DATE <- ifelse(is.na(as.POSIXct(x$SHIP_DATE, format="%d-%b-%Y %H:%M %p")),
yes = as.POSIXct(x$SHIP_DATE, format="%d-%b-%Y %H:%M"),
no = as.POSIXct(x$SHIP_DATE, format="%d-%b-%Y %H:%M %p"))
x$SHIP_DATE <- as.POSIXct(x$SHIP_DATE, origin = "1970-01-01")
ADJ_PICK_DATE的计算方法如下:
x$ADJ_PICK_DATE <- ifelse(x$PICK_TIME=="EARLY",
as.POSIXct(paste(format(x$PICK_DATE, "%d-%b-%Y"), "03:00"),
format="%d-%b-%Y %H:%M"), x$PICK_DATE)
x$ADJ_PICK_DATE <- ifelse(x$PICK_TIME=="LATE",
as.POSIXct(paste(format(x$PICK_DATE+86400, "%d-%b-%Y"),
"03:00"), format="%d-%b-%Y %H:%M"),
x$ADJ_PICK_DATE)
x$ADJ_PICK_DATE <- as.POSIXct(x$ADJ_PICK_DATE, origin = "1970-01-01")
计算PICK_TIME以调整PICK_DATE,对于16:00之间的任何订单 &安培; 03:00,提前期从凌晨3点开始计算。
问题:
样本数据(日期在源(PICK_DATE&amp; SHIP_DATE)中随机格式化为“DD-MMM-YYYY HH:mm”和“DD-MMM-YYYY hh:mm AM / PM”):
PICK_DATE SHIP_DATE PICK_TIME
01-APR-2017 00:51 02-APR-2017 06:55 EARLY
01-APR-2017 00:51 02-APR-2017 12:11 PM EARLY
01-APR-2017 07:51 02-APR-2017 12:11 PM OKAY
01-APR-2017 02:51 PM 02-APR-2017 09:39 AM LATE
答案 0 :(得分:0)
好的,我现在得到了一些解决方案。
lubridate
包,此方法需要大约50%的处理时间:x$ADJ_PICK_DATE <- ifelse(x$PICK_TIME=="EARLY", dmy_hm(paste(format(x$PICK_DATE, "%d-%b-%Y"), "03:00")), ifelse(x$PICK_TIME=="LATE", dmy_hm(paste(format(x$PICK_DATE+86400, "%d-%b-%Y"), "03:00")), x$PICK_DATE)) x$ADJ_PICK_DATE <- as.POSIXct(x$ADJ_PICK_DATE, origin = "1970-01-01")
lubridate
:x$SHIP_DATE <- lubridate::dmy_hm(x$SHIP_DATE) x$PICK_DATE <- lubridate::dmy_hm(x$PICK_DATE)