【问题标题】:If today's date is Saturday, Sunday, or Monday then set today's date to last Friday, else set to today in R如果今天的日期是周六、周日或周一,则将今天的日期设置为上周五,否则在 R 中设置为今天
【发布时间】:2021-10-04 17:16:14
【问题描述】:

只有System Libraries(最好),如果今天是周六、周日或周一,我如何将今天的日期设置为上周五,否则设置为今天的日期?

todaysDate <- Sys.Date()

if(weekdays(todaysDate) == "Saturday" || weekdays(todaysDate) == "Sunday" 
   || weekdays(todaysDate) == "Monday") {
  todaysDate == ???} else {
    todaysDate <- Sys.Date()
  }

提前致谢。


使用的系统:

  • R 版本:4.1.1 (2021-08-10)
  • RStudio 版本:1.4.1717
  • 操作系统:macOS Catalina 版本 10.15.7 和 macOS Big Sur 版本 11.6

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以在与“星期五”匹配的“今天日期”之前的日期序列上使用match 执行此操作

    if(weekdays(todaysDate) %in% c("Saturday", "Sunday", "Monday")) {
          s1 <- todaysDate - (1:8)
          todaysDate <- s1[match('Friday', weekdays(s1))]
        }
    

    【讨论】:

    • 太好了,谢谢 akrun!
    【解决方案2】:

    你可以使用逻辑:

    todaysDate <- Sys.Date()
    today <- weekdays(todaysDate)
    
    if(today == "Saturday")
      todaysDate <- todaysDate - 1
    else if (today == "Sunday") 
       todaysDate <- todaysDate - 2
    else if (today == "Monday") 
       todaysDate <- todaysDate - 3
    

    【讨论】:

      【解决方案3】:

      另一种解决方案可能是递归函数:

      dayFun <- function(x) {
        if (weekdays(x) %in% c("Saturday", "Sunday", "Monday")) {
          return(dayFun(x-1))
        } else {
          return(x)
        }
      }
      dayFun(Sys.Date())
      
      

      注意weekdays 的结果取决于机器的语言设置,所以如果这是一个问题,需要更多的想法

      【讨论】:

      • 感谢您的解决方案。但是,当我今天尝试它时,它与 todaysDate &lt;- Sys.Date()(即 2021-10-05)一起工作,但是当我设置 todaysDate &lt;- Sys.Date()-1(即 2021-10-04)时它给了我一个 Error: C stack usage 7969664 is too close to the limit。 2021-10-03 和 2021-10-02 发生了同样的错误,但如果 Sys.Date() = 2021-10-05,则适用于 2021-10-01(即todaysDate &lt;- Sys.Date()-4)。
      • 修复日期名称中的错字是否解决了这个问题?
      • 纠正错字后它确实有效。谢谢。
      猜你喜欢
      • 2018-05-24
      • 1970-01-01
      • 2012-10-22
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多