gpt4 book ai didi

r - 计算R中每月的星期五或星期一的数量

转载 作者:行者123 更新时间:2023-12-03 07:26:32 25 4
gpt4 key购买 nike

我想要一个可以计算每月特定天数的函数。

即13年11月-> 5个星期五。而13年12月将返回4个星期五。

是否有一个优雅的功能可以返回此结果?

library(lubridate)

num_days <- function(date){
x <- as.Date(date)
start = floor_date(x, "month")
count = days_in_month(x)

d = wday(start)
sol = ifelse(d > 4, 5, 4) #estimate that is the first day of the month is after Thu or Fri then the week will have 5 Fridays
sol
}

num_days("2013-08-01")
num_days(today())

有什么更好的方法可以做到这一点?

最佳答案

1)这里d是输入,是Date类对象,例如d <- Sys.Date()。结果给出了包含d的年/月中的星期五数。用1替换5以得到星期一的数量:

first <- as.Date(cut(d, "month"))
last <- as.Date(cut(first + 31, "month")) - 1
sum(format(seq(first, last, "day"), "%w") == 5)

2)用下一行替换最后一行。在这里,第一学期是从下一个月的第一个月或之后的大纪元到下一个星期五的星期五数,第二学期是 d'中的从大纪元到下一个星期五的星期五数。一个月。同样,我们将所有5替换为1,以获取星期一的计数。
ceiling(as.numeric(last + 1 - 5 + 4) / 7) - ceiling(as.numeric(first - 5 + 4) / 7)

第二个解决方案稍长一些(尽管它具有相同的行数),但是它具有被矢量化的优势,即 d可以是日期的矢量。

更新:添加了第二个解决方案。

关于r - 计算R中每月的星期五或星期一的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19913244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com