计算自本周开始以来的时间?

时间:2013-01-13 21:23:48

标签: r

我有一堆日期时间数据,我想看看是否有任何每周模式。因此,我想用R来计算自本周开始以来的经过时间(以秒为单位)。

我该怎么做?我使用difftime(time,as.Date(time))为每日模式做了同样的事情,但我不能在本周使用相同的技巧,因为没有as.Week()

2 个答案:

答案 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")
}