R strptime 星期一日期从 weeknumber 奇怪

R strptime Monday date from weeknumber weird

我在这里犯了一个小错误,但无法弄清楚问题出在哪里。

我需要得到一个随机日期的一周中星期一的日期。似乎我得到的东西完全不同

mydate <- date("2013-11-05")

format(mydate, "%A")           # this is Tuesday, right
#[1] "Tuesday"
month(mydate)                  # Month November, right
#[1] 11
myyr <- year(mydate); myyr     # year is 2013, right
#[1] 2013
day(mydate)                    # day number is 5, right
#[1] 5 
mywk <- isoweek(mydate);mywk   # weeknumber is 45, right (yes, not US convention here)
#[1] 45
format(mydate, "%V")           # weeknumber is 45, right as well
#[1] "45" 
# Monday of week 45 is 2013-11-04 but strptime following gives something else...

strptime(paste0(myyr, "Monday", mywk), "%Y%A%V")
#[1] "2013-11-19 EET" 
# and for checking

strptime("2013Monday45","%Y%A%V")
#[1] "2013-11-19 EET"

提前致谢

Gabor 的评论基本上就是您所需要的。这是一个完整的函数:

mondayForGivenDate <- function(d) { 
    if (class(d) != "Date") d <- anytime::anydate(d)
    d - as.POSIXlt(d)$wday + 1
}

运行今天(星期六)、下星期一和上星期六的这个为我们提供三个不同的星期一,如您所料:

R> mondayForGivenDate(Sys.Date())
[1] "2016-11-14"
R> mondayForGivenDate(Sys.Date()+2)
[1] "2016-11-21"
R> mondayForGivenDate(Sys.Date()-7)
[1] "2016-11-07"
R> 

使用 anytime 中的 anydate() 函数是可选的,但很好,因为您现在可以使用许多不同的输入格式:

R> mondayForGivenDate(20161119)
[1] "2016-11-14"
R> mondayForGivenDate("20161119")
[1] "2016-11-14"
R> mondayForGivenDate("2016-11-19")
[1] "2016-11-14"
R> mondayForGivenDate("2016-Nov-19")
[1] "2016-11-14"
R> 

再一次,关键点是 在 R 中使用正确的 Date and/or POSIXt 类这几乎总能为您提供所需的信息——在这种情况下,星期几的 wday 组件需要恢复到本周的星期一。