我有一堆日期时间数据,我想看看其中是否有任何每周模式。所以我想用 R 计算自一周开始以来经过的时间(以秒为单位)。
我怎样才能做到这一点?我对每天使用的模式做了同样的事情,difftime(time,as.Date(time))
但我不能在一周内使用相同的技巧,因为没有as.Week()
.
我有一堆日期时间数据,我想看看其中是否有任何每周模式。所以我想用 R 计算自一周开始以来经过的时间(以秒为单位)。
我怎样才能做到这一点?我对每天使用的模式做了同样的事情,difftime(time,as.Date(time))
但我不能在一周内使用相同的技巧,因为没有as.Week()
.
您可以在基础 R 中执行此操作,并且您已经给自己答案:difftime()
使用适当的偏移量。
即使是午夜也足够好,因为您只需将 dayOfTheWeek * 24 * 60 * 60 添加到 is,而 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>
这也是我的解决方案:
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")
}