lubridate
にはceiling_date
という機能がありますが、指定された日付から次の土曜日に週が終了します。代わりに次の日曜日に終わる週を得るために変更することはできますか?次の日曜日に週末を取得する方法
> ceiling_date(as.Date('2017-06-16'), 'week')
[1] "2017-06-17 20:00:00 EDT"
lubridate
にはceiling_date
という機能がありますが、指定された日付から次の土曜日に週が終了します。代わりに次の日曜日に終わる週を得るために変更することはできますか?次の日曜日に週末を取得する方法
> ceiling_date(as.Date('2017-06-16'), 'week')
[1] "2017-06-17 20:00:00 EDT"
私はここに記載されているとして、これは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
になるように設定しました。
申し訳ありませんが、質問でこれを明らかにしておく必要がありますが、指定された日付が日曜日の場合は、日曜日が返されると予想していました。 '2017-06-18'は' 2017-06-18'のままです –
さて、編集しました。ちょうどそれが日曜日だったかどうかを確認するためにちょっとした条件を追加するだけでした –
'ceiling_date(as.Date( '2017-06-16')、 'week')+ 60 * 60 * 24'? – Sotos
これは実際には 'ceiling_date'のバグかもしれないと思います。 https://github.com/tidyverse/lubridate/issues/479を参照してください(ヘンリックは別の回答でこれを指摘しました) –
日時が日曜日の場合は手動で調整することができます: 'ceiling_date(as.Date( ' 2017-06-18 ')、' week ')+ 60 * 60 * 24 [1] "2017-06-25 20:00:00 EDT"' –