2015-09-09 44 views
9

私はRに日付を変換したい年の週があります。 週番号を現在の日付に変換する

as.Date(paste(2014,df$Week,1,sep=""),"%Y%U%u") 

しかし、週がより大きい場合、このコードは動作します:私は今までにこれを変換すると、簡単なようで、私は2014年1でそれらの値を固定していますので、私は一年と曜日を選択する必要があります知っています9.週1-9はNAを返します。週を01,02,03に変更すると、まだNAが返されます。

誰かが私が見逃しているのを見てください。

+0

[Rの日付オブジェクトに年/週変換]の可能な重複(https://stackoverflow.com/questions/45549449/transform-year-week-to-date-object-in-r) – Uwe

+0

用心今年の週をどのようにカウントするかについてのさまざまな慣習のうちの1つです。ディスカッションについては、[この回答](https://stackoverflow.com/a/45587644/3817004)をご覧ください。 – Uwe

答えて

11

as.Dateは、週番号の2桁を期待しており、正しく解析できないため、NAとして1〜9を呼び出しています。

すると、一部に追加し、それを修正するには - 物事を分割する:

as.Date(paste(2014, df$Week, 1, sep="-"), "%Y-%U-%u") 
+0

rは数値データの01の '0'を削除します。' paste(2014,01,1、sep = "") ' - " 201411 "の出力を参照してください。 'paste(2014、" 01 "、1、sep =" ")'を使って文字にすることはできますが、データが簡単には機能しない数値であれば可能です。 – jeremycg

+2

週の1年を数える方法に関するさまざまな慣習に注意してください。ディスカッションについては、[この回答](https://stackoverflow.com/a/45587644/3817004)をご覧ください。 – Uwe

2

代替ソリューションは、lubridateパッケージから日付計算を使用することです:2014-01-01があるので

lubridate::ymd("2014-01-01") + lubrdiate::weeks(df$Week - 1) 

-1が必要ですもう1週間です。つまり、私たちは欲しいです。

  • df$Week == 1
  • df$Week == 2は(ymd("2014-01-01") + weeks(2-1)ある)2014-01-08するように
  • とをマッピングする(ymd("2014-01-01") + weeks(1-1)である)2014-01-01にマッピングします。
+0

年の変化を考慮に入れて、どのように一般化しますか? – Phil

+0

今週の週を数える方法に関するさまざまな慣習に注意してください。ディスカッションについては、[この回答](https://stackoverflow.com/a/45587644/3817004)をご覧ください。 – Uwe

関連する問題