【问题标题】:change the weekend date to weekday date in R在R中将周末日期更改为工作日日期
【发布时间】:2020-02-11 16:21:17
【问题描述】:

我正在阅读 R 中的一个 excel 文件并计算该日期前 6 个月的日期。如果日期是周末,则需要将日期更改为下一个工作日。

例如:如果日期是 2020 年 2 月 7 日,则前六个月是 2019 年 8 月 11 日。这是星期天。 如何将日期更改为 2019-08-12?

我尝试了以下代码:

date <- as.date.character("2020-2-7")
nxtd <- date-180
if(weekdays(nxtd)=="Saturday"){nxtd <- date-182} else if(weekdays(nxtd)=="Sunday"){nxtd <- date-181}
else{nxtd <- date-180}

此代码给出错误/警告“条件长度 > 1 并且仅使用第一个元素”

我该如何解决?

【问题讨论】:

  • 如果你想检查一个值是否在一个向量中,你可以使用%in%。 == 检查两件事是否相等。 R 中的if / else 结构未矢量化,这就是您收到警告(而不是错误)的原因 - 只会根据第一个值检查条件。使用矢量化的ifelse。在这种情况下,这并不重要,因为您的示例只有 1 个值,但我想您的真实数据有更多。您还缺少 2 个右引号。
  • 我的真实数据大概有50行数据。
  • 这就是我的想法,这就是为什么你要切换到ifelse。该警告已讨论here。另外,您假设 6 个月正好是 180 天——这真的是您想要的吗?
  • @camille,谢谢,是的,我需要坚持 180 天。

标签: r date if-statement


【解决方案1】:
library(lubridate)
d1 = as.Date("2020-2-9")
d2 = d1 - 180
if(weekdays(d2) %in% c("Saturday", "Sunday")){
    floor_date(d2 - 3, "week") + 8
} else {
    d2
}

【讨论】:

  • 这只有在你有一个日期时才有效,当你有多个日期时,“条件长度> 1并且只使用第一个元素”的错误仍然存​​在。
  • 能解释一下减3加8的操作吗?
猜你喜欢
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多