たくさんの日時データがあり、週ごとのパターンがあるかどうかを確認したいと思います。そこで、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に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>
これが私の解決策でもあります:
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")
}