【问题标题】:Finding the last day of 3rd week for each month in R在R中查找每个月第3周的最后一天
【发布时间】:2021-05-22 22:58:39
【问题描述】:

我有一个包含日期的向量。我想找到每个月第三周的最后一天的日期。

结构(c(18631L, 18632L, 18633L, 18634L, 18635L, 18638L, 18639L, 18640L, 18641L, 18642L, 18645L, 18646L, 18647L, 18648L, 18649L, 18651L, 18652L, 18653L, 18654L, 18655L, 18656L, 18659L, 18660L, 18661L, 18662L, 18663L, 18666L, 18667L, 18668L, 18669L, 18670L, 18673L、18674L、18675L、18676L、18677L、18680L、18681L、18682L、 18683L, 18684L, 18687L, 18688L, 18689L, 18690L, 18691L, 18694L, 18695L, 18696L, 18697L, 18698L, 18701L, 18702L, 18703L, 18704L, 18705L、18708L、18709L、18710L、18711L、18712L、18715L、18716L、 18717L、18718L、18722L、18723L、18724L、18725L、18726L、18729L、 18730L, 18731L, 18732L, 18733L, 18736L, 18737L, 18738L, 18739L, 18740L、18743L、18744L、18745L、18746L、18747L、18750L、18751L、 18752L、18753L、18754L、18757L、18758L、18759L、18760L、18761L、 18764L, 18765L, 18766L, 18767L, 18768L), class= c("IDate", "Date" ))

我曾尝试使用 lubridate 解决此问题,但未能成功。我相信有人应该能够很快弄清楚。

【问题讨论】:

  • 您应该明确什么是“一周”。是否与POSIXlt 使用的编号一致?所以如果一个月从星期六开始,你会如何回答这个问题?用自然语言展示这些步骤,然后展示你在编码方面所做的努力。
  • 预期输出为“2021-01-22”“2021-02-19”“2021-03-19”“2021-04-16”“2021-05-21”。这些日期是每个月第三周的最后日期。

标签: r lubridate


【解决方案1】:

这取决于您如何定义每个月的周数,如 @IRTFM 所述。但是,如果d 是日期向量,则使用基数 R 从函数 here 获取帮助,这是一种尝试。

monthweeks <- function(x) {
  ceiling(as.numeric(format(x, "%d")) / 7)
}

d[monthweeks(d) == 3 & weekdays(d) == 'Friday']
#[1] "2021-01-15" "2021-02-19" "2021-03-19" "2021-04-16" "2021-05-21"

【讨论】:

  • 效果很好。非常感谢罗纳克!
【解决方案2】:

也许这有帮助

library(lubridate)
library(dplyr)
tibble(v1, v2 = floor_date(v1, 'month'), v3 = week(v1) - 
         week(v2) + 1) %>% 
 filter(v3 == 3) %>% 
 group_by(v2) %>% 
 slice_max(n = 1, order_by = v1) %>%
 ungroup

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 2013-04-20
    相关资源
    最近更新 更多