1

任务是找出两个月的 MTD 天数,在我的案例中流入量最高的月份(7 月)和本月。因为我计划每天将语句作为脚本运行,所以我不想硬编码任何东西。

数据框是这样的:

SERVICE              BEST MONTH TOTAL    BEST MONTH MTD  CURR. MONTH MTD
No of Working Days
..
..
..

对于“BEST MONTH TOTAL”,我使用了以下语句:

report[1,2] <- sum(!weekdays(seq(as.Date('2019-07-01'), as.Date('2019-07- 
31'), 'days')) %in% c('Sunday','Saturday'))

对于当前月份的 MTD 天数,我使用以下方法计算的天数:

difftime(Sys.Date(),'2019-09-01',units = "days" )

这给出了输出:

Time difference of 12.22917 days

有没有办法让我只得到整数 12?

我如何计算最佳月份 MTD?是否有一个函数可以帮助在 7 月份回到与 sys.date() 相同的日期来计算 MTD 的工作日数?即基本上我需要的是:

difftime('2019-07-13','2019-07-01', units = "days")

但不想硬编码“2019-07-13”,因为我想将其作为脚本运行并希望避免每天更改日期。另外,我只需要整数的差异而没有“...天的时间差异”。

4

2 回答 2

0

这是你想要的吗?

trunc(difftime(Sys.Date(),'2019-09-01',units = "days"))
#output
#Time difference of 12 days

best_month_mtd <- function(y) {
  trunc(difftime(Sys.Date(),y, units = "days"))
}

#typical usage
best_month_mtd('2019-09-01')
#output
#Time difference of 12 days

那应该给你你想要的。

更新

如果您只想计算从该月的开始日期经过的天数,则使用一个班轮lubridate可能会很方便。这可能与实际工作日数不同。后者需要处理组织中的日历关闭天数以及国定假日。

library(lubridate)
# -------------------------------------------------------------------------
#The start date of the month can be computed using floor_date() from lubridate 
#floor_date() takes a date-time object and rounds it down to the nearest 
#boundary of the specified time unit.
month_start <- floor_date(Sys.Date(), "month")
month_start
#"2019-09-01"
# -------------------------------------------------------------------------
#difftime between Sys.Date() and month_start
difftime(Sys.Date(),month_start, units = "days")
#Time difference of 12 days
# -------------------------------------------------------------------------
# to print only the number of days 
paste0(trunc(difftime(Sys.Date(),month_start, units = "days")))
#"12"
# -------------------------------------------------------------------------
#Using the above a one liner can be constructed follows. 
paste0(trunc(difftime(Sys.Date(),floor_date(Sys.Date(), "month"), units = "days")))

于 2019-09-13T09:29:23.827 回答
0

以数字形式转换为天数:

as.numeric(difftime(Sys.Date(),'2019-09-01',units = "days" ))
于 2019-09-13T09:24:16.190 回答