2017-06-16 29 views
3

lubridateにはceiling_dateという機能がありますが、指定された日付から次の土曜日に週が終了します。代わりに次の日曜日に終わる週を得るために変更することはできますか?次の日曜日に週末を取得する方法

> ceiling_date(as.Date('2017-06-16'), 'week') 
[1] "2017-06-17 20:00:00 EDT" 
+1

'ceiling_date(as.Date( '2017-06-16')、 'week')+ 60 * 60 * 24'? – Sotos

+0

これは実際には 'ceiling_date'のバグかもしれないと思います。 https://github.com/tidyverse/lubridate/issues/479を参照してください(ヘンリックは別の回答でこれを指摘しました) –

+0

日時が日曜日の場合は手動で調整することができます: 'ceiling_date(as.Date( ' 2017-06-18 ')、' week ')+ 60 * 60 * 24 [1] "2017-06-25 20:00:00 EDT"' –

答えて

0

私はここに記載されているとして、これはceiling_dateのバグかもしれないと思う:https://github.com/tidyverse/lubridate/issues/479

回避策の一つは、年/週、その後、日曜日にラウンドをつかむために次のようになります。

as.Date(paste0(year('2017-06-16'), week('2017-06-16') + ifelse(wday('2017-06-16')==1,0,1), 7), format = "%Y%U%u") 
#[1] "2017-06-18" 

?strptimeから:

  • %Yはc (すなわち、 2017)
  • %U 1-7からの曜日である小数
  • %uとして年の週である(1月曜日)

だから我々は1(したがって+1)によって私たちの週にシフトする必要があると私たちは日が7になるように設定しました。

+0

申し訳ありませんが、質問でこれを明らかにしておく必要がありますが、指定された日付が日曜日の場合は、日曜日が返されると予想していました。 '2017-06-18'は' 2017-06-18'のままです –

+0

さて、編集しました。ちょうどそれが日曜日だったかどうかを確認するためにちょっとした条件を追加するだけでした –

関連する問題