web-dev-qa-db-ja.com

week()に注油して、複数年の期間の連続する週番号を見つけます

R内で、いくつかのLubridate日付のベクトルがあるとします。

> Date
"2012-01-01 UTC"
"2013-01-01 UTC"

次に、最近の週数を確認したいとします。

> week(Date)
1
1

潤滑剤は素晴らしいです!

しかし、待ってください...私は10,000行のデータを扱う時系列を扱っています...そしてデータは3年に及びます。

私はこれを実現する方法を見つけるのに苦労してきました:

> result of awesome R code here
1
54

質問:Lubridate内の複数年の期間にわたる週番号のリストを引き出すための簡潔な方法はありますか?もっと直接的に言えば、2年目の最初の週を54週目として表現したいと思います。そして、3年目の最初の週は107週目として表されます。

これまでにいくつかのハックニースキームを試みましたが、スコッチテープで固定されていないものを作成することはできないようです。アドバイスをいただければ幸いです。前もって感謝します。

13
Matt O'Brien

特定の日付から別の日付までの間隔を取得するには、減算するだけです...

tdaが日付のベクトルである場合、

tda - min(tda)

それらの間の秒単位の差になります。

数週間でユニットを取り出すには:

(tda - min(tda))/eweeks(1)

特定の日付からそれを行うには:

tda - ymd(19960101)

これにより、1996年から各値までの日数がわかります。

そこから、1週間あたりの日数、または1週間あたりの秒数で割ることができます。

(tda - ymd(19960101))/eweeks(1)

整数部分のみを取得し、2012年1月から開始するには:

trunc((tda - ymd(20111225))/eweeks(1))

テストデータ:

tda = ymd(c(20120101, 20120106, 20130101, 20130108))

出力:

 1  1 53 54
13
beroe

eweeks()は非推奨になったので、@ beroeの回答に追加したいと思いました。

tdaが日付ベクトルの場合、次の方法で週番号を取得できます。

weeknos <- (interval(min(tda), tda) %/% weeks(1)) + 1

どこ %/%は整数除算を引き起こします。 (5 / 3 = 1.667; 5 %/% 3 = 1

3
s-heins

あなたはこのようなことをすることができます:

week(dat) +53*(year(dat)-min(year(dat)))
2
agstudy