gpt4 book ai didi

r - 如何将日期转换为最近的周末(星期六)

转载 作者:行者123 更新时间:2023-12-02 17:21:12 26 4
gpt4 key购买 nike

我有一个数据框,其日期格式为“%d-%m-%Y”,并且有周数。日期是工作日,我希望在另一栏中显示该周的星期六。

我最初使用 Chron 包中的函数检查日期是工作日还是周末,但这是一个 bool 验证。我已将日期变量格式化为日期格式并提取每个日期的周数。

df = data.frame(date=c("2014-08-20", "2014-08-25", "2014-10-08")) 
df$date=as.Date(df$date,format="%Y-%m-%d")
df$week=week(ymd(df$date))

预期结果应该是:

date        week    EOW  
2014-08-20 34 2014-08-23

2014-08-25 34 2014-08-30

2014-10-08 41 2014-10-11

最佳答案

基础 R 选项。首先创建所有日期的列表,然后将其与工作日相匹配,并从 6(如我们想要的星期六)中减去它,以获得我们需要在原始数据中添加多少天日期列。

all_days <- c("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday")

#As @nicola mentioned this is locale dependent
#If your locale is not English you need weekdays in your current locale
#which you can manually write as shown above or do any one of the following

#all_days <- weekdays(seq(as.Date("2019-01-14"),by="day",length.out=7))
#OR
#all_days <- format(seq(as.Date("2019-01-14"),by="day",length.out=7), "%A")

df$EOW <- df$date + 6 - match(weekdays(df$date), all_days)

df
# date week EOW
#1 2014-08-20 34 2014-08-23
#2 2014-08-25 34 2014-08-30
#3 2014-10-08 41 2014-10-11
<小时/>

或者lubridate有一个函数ceiling_date,当与unit =“week”一起使用时,它会返回下一个“星期日”,所以我们减去1 天后改为“星期六”。

library(lubridate)
df$EOW <- ceiling_date(df$date, unit = "week") - 1

关于r - 如何将日期转换为最近的周末(星期六),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54436932/

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