5

たくさんの日時データがあり、週ごとのパターンがあるかどうかを確認したいと思います。そこで、R で週の初めからの経過時間 (秒単位)を計算したいと思います。

どうやってやるの?を使用して毎日のパターンで同じことを行いましたdifftime(time,as.Date(time))が、 がないため、同じトリックを週に使用することはできませんas.Week()

4

2 に答える 2

7

あなたはベースRでそれを行うことができます、そしてあなたはすでにあなた自身に答えを与えました:difftime()適切なオフセットで。

dayOfTheWeek * 24 * 60 * 60をisに追加するだけで、真夜中でも十分です。dayOfTheWeekはのフィールドですPOSIXlt

ハイエンドのヘルパーパッケージが必要な場合は、私のRcppBDTにBoostDate_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> 
于 2013-01-13T21:40:22.777 に答える
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")
}
于 2013-01-13T21:52:15.827 に答える