我有一堆日期时间数据,我想看看是否有任何每周模式。因此,我想用R来计算自本周开始以来的经过时间(以秒为单位)。
我该怎么做?我使用difftime(time,as.Date(time))
为每日模式做了同样的事情,但我不能在本周使用相同的技巧,因为没有as.Week()
。
答案 0 :(得分:7)
你可以在R基础上做到这一点,你已经给了自己答案:difftime()
有一个适当的偏移量。
即使午夜也足够好,因为你只需要添加dayOfTheWeek * 24 * 60 * 60,而dayOfTheWeek是POSIXlt
中的一个字段。
如果您需要更高端的帮助程序包,我的RcppBDT也有一些来自Boost Date_Time的函数。
插图:
R> now <- Sys.time()
R> midnight <- trunc(now, "days") # elegant way to get midnight; thanks @flodel
R> today <- as.POSIXlt(Sys.Date())
R> today$wday # it is Sunday
[1] 0
R>
R> difftime(now, midnight, unit="secs")
Time difference of 56630.6 secs
R>
所以你可以添加today$wday * 24 * 60 * 60
R> as.numeric(difftime(now, midnight, unit="secs")) + today$wday*24*60*60
[1] 56630.6
R>
答案 1 :(得分:3)
这也是我的解决方案:
secs.in.week <- function(t) {
d <- as.integer(format(t, "%w"))
d <- ifelse(d, d-1, 6)
weekstart <- as.POSIXct(as.Date(t)-d) - 2 * 3600 # Convert UTC -> Local time. I'm on UTC+2h
as.numeric(difftime(t,weekstart), units="secs")
}