【发布时间】:2018-02-20 16:58:22
【问题描述】:
现在我有一个新问题。我需要计算两个日期之间的时间跨度。我的问题是:必须排除周末,时间跨度可以是负数或正数。 例如:
Planed delivery Real delivery
2017-11-28 2018-11-17
2016-05-10 2016-09-22
2016-06-08 2016-11-07
2016-07-08 2016-06-07
等等。 我有以下代码可以做到这一点:
getDuration <- function(date_scheduled, date_received,fmt="%Y-%m-%d") {
myDays <- ifelse(date_received > date_scheduled,
seq.Date(to = as.Date(date_received, format=fmt),
from = as.Date(date_scheduled, format =fmt),
by = 1),
seq.Date(to = as.Date(date_scheduled, format=fmt),
from = as.Date(date_received, format =fmt),
by = 1))
length(myDays[!is.weekend(myDays)])
}
当我使用命令时:
getDataPart(prep_DPM_All_new$Goods_received_date, prep_DPM_All_new$Schedule_Line_Delivery)
我收到以下错误:
Error in seq.Date(to = as.Date(date_received, format = fmt), from = as.Date(date_scheduled, :'from' must be of length 1
起初我认为日期列的格式不正确,但我认为它看起来不错。
str(prep_DPM_All_new$Goods_received_date)
POSIXct[1:33078], format: "2016-03-24"
str(prep_DPM_All_new$Schedule_Line_Delivery)
POSIXct[1:33078], format: "2016-03-29"
谁能帮我解释一下,为什么我会收到错误消息? 如果没有 if else 语句,我得到了错误,即“错误的登录方式”。
输出应该是这样的:
Row 1: 254
Row 2: 109
Row 3: 98
Row 4: -24
我试图通过对类似问题使用一些解决方案来解决问题,但这些问题只有正值。我认为负值是主要问题。
【问题讨论】:
-
您希望从上表中得到什么结果?
-
第 1 行:254,第 2 行:109,第 3 行:98,第 4 行:-24
-
请您仔细检查一下预期的结果。我相信第 2 行和第 3 行的结果已经交换。