【发布时间】:2017-07-29 14:07:22
【问题描述】:
如何编写这段代码(hour 来自 lubridate 包)?
目标:如果 PICK_DATE 的小时部分晚于 16:00,则 ADJ_PICK_DATE 应该是第二天 03:00。如果 PICK_DATE 的小时部分早于 03:00,则 ADJ_PICK_DATE 为同一天 03:00。问题是,当不需要更改时,代码仍然会在 PICK_DATE 上增加 3 小时,即 PICK_DATE 的小时部分在 03:00 和 16:00 之间。
x$PICK_TIME <- cut(hour(x$PICK_DATE), c(-1, 2, 15, 24), c("EARLY", "OKAY", "LATE"))
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_DATE SHIP_DATE
01-APR-2017 00:51 02-APR-2017 06:55 AM
01-APR-2017 00:51 02-APR-2017 12:11 PM
01-APR-2017 00:51 02-APR-2017 12:11 PM
01-APR-2017 00:51 02-APR-2017 09:39 AM
【问题讨论】:
标签: r datetime lubridate posixct