我在这里犯了一个小错误,但无法集中精力找出问题所在。
我需要获取随机日期的星期一的日期..似乎我得到了完全不同的东西
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"
提前致谢
本质上,加博尔的评论就是你所需要的。这是一个完整的函数:
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>
使用anydate()
函数从anytime是可选的但很好,因为您现在可以使用许多不同的输入格式:
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>
再次强调,关键是工作与适当的Date
and/or POSIXt
R 中的类它几乎总能为你提供所需的东西——在这种情况下wday
星期几的组件需要恢复到本周的星期一。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)