5

次のような年週形式の日付の文字列があります。

weeks.strings <- c("2002-26", "2002-27", "2002-28", "2002-29", "2002-30", "2002-31")

ただし、この文字を Date クラスに変換すると、週の識別子が失われます。

> as.Date(weeks.strings, format="%Y-%U")
[1] "2002-08-28" "2002-08-28" "2002-08-28" "2002-08-28" "2002-08-28"
[6] "2002-08-28"

上記のように、形式は年に変換され、今日の日付と連結されるため、元の週に関する情報は失われます (例: format 関数または strptime を使用して元の形式に強制的に戻そうとする場合)。

ヘルプ グループで見つけた解決策の 1 つは、曜日を指定することです。

as.Date(weeks.strings, format="%Y-%u %U")
[1] "2002-02-12" "2002-02-19" "2002-02-26" "2002-03-05" "2002-01-02"
[6] "2002-01-09"

しかし、これにより週番号が正しくないように見えます (元の文字列と一致しません)。

任意のガイダンスをいただければ幸いです。

4

2 に答える 2

10

weeks.strings日付を明確にするために、平日を追加するだけです( R-helpに関するJim Holtmanの回答から適応)。

as.Date(paste(weeks.strings,1),"%Y-%U %u")

コメントで指摘されているように、日付が長い範囲にまたがる場合、日付クラスは適切ではありません。これは、ある時点で、選択された曜日が年の最初/最後の週に存在しないためです。その場合、整数部分が年で、小数部分が週/年の分数である数値ベクトルを使用できます。例えば:

wkstr <- sprintf("%d-%02d", rep(2000:2012,each=53), 0:52)
yrwk <- lapply(strsplit(wkstr, "-"), as.numeric)
yrwk <- sapply(yrwk, function(x) x[1]+x[2]/53)
于 2012-08-28T19:16:21.487 に答える
4

明らかに、各週は最大 7 つの異なる日付のいずれかで表すことができるため、一意のソリューションはありません。とはいえ、ここに1つのアイデアがあります:

weeks.strings <- c("2002-26", "2002-27", "2002-28", "2002-29",
                   "2002-30", "2002-31")

x <- as.Date("2002-1-1", format="%Y-%m-%d") + (0:52*7)
x[match(weeks.strings, format(x, "%Y-%U"))]
# [1] "2002-07-02" "2002-07-09" "2002-07-16" "2002-07-23"
# [5] "2002-07-30" "2002-08-06"
于 2012-08-28T18:47:00.167 に答える