Rのseqを使って先月を求めるときの注意点¶
月末日を利用して先月を求めたときのメモ。
<追記あり>
下記のように計算されているので、月末ではなく月初を利用するようにした。
- 2015-03-31の先月は2015-03-03
- 2015-03-03 -> 2015-02-31
x <- "2015-03-31"
print(seq(as.Date(x), len=12, by="-1 month"))
[1] "2015-03-31" "2015-03-03" "2015-01-31" "2014-12-31" "2014-12-01" "2014-10-31"
[7] "2014-10-01" "2014-08-31" "2014-07-31" "2014-07-01" "2014-05-31" "2014-05-01"
x <- "2015-03-01"
print(seq(as.Date(x), len=12, by="-1 month"))
[1] "2015-03-01" "2015-02-01" "2015-01-01" "2014-12-01" "2014-11-01" "2014-10-01"
[7] "2014-09-01" "2014-08-01" "2014-07-01" "2014-06-01" "2014-05-01" "2014-04-01"
lubridate¶
https://twitter.com/kohske/status/583989166301511680 日付扱う時はlubridateが便利だと思う。何も考えずymd("2015-03-31") %m-%months(1:12)
で事足りる
と書かれていたので思いつくのものを試してみた。 結論は便利。ただし、Timezoneだけめんどう。
sample¶
install.packages("lubridate")
library(lubridate)
ymd("2015-03-31") %m-% months(1:12)
# [1] "2015-02-28 UTC" "2015-01-31 UTC" "2014-12-31 UTC" "2014-11-30 UTC" "2014-10-31 UTC"
# [6] "2014-09-30 UTC" "2014-08-31 UTC" "2014-07-31 UTC" "2014-06-30 UTC" "2014-05-31 UTC"
# [11] "2014-04-30 UTC" "2014-03-31 UTC"
ymd¶
ymd("2015-03-31")
#[1] "2015-03-31 UTC"
class(ymd("2015-03-31"))
#[1] "POSIXct" "POSIXt"
?ymd
#ymd(..., quiet = FALSE, tz = "UTC",
# locale = Sys.getlocale("LC_TIME"), truncated = 0)
months¶
months(1)
#[1] "1m 0d 0H 0M 0S"
?months
# {base}
class(months(1))
#[1] "Period"
#attr(,"package")
#[1] "lubridate"
# classを見て疑問に思ったので
# libraryする前を試してみると
months(1)
# 以下にエラー UseMethod("months") :
# 'months' をクラス "c('double', 'numeric')" のオブジェクトに適用できるようなメソッドがありません
Date and POSIXct¶
class(as.Date("2015-03-31"))
#[1] "Date"
as.POSIXct(as.Date("2015-03-31"))
#[1] "2015-03-31 09:00:00 JST"
tz¶
ymd("2015-03-31", tz = "JST")
#[1] "2015-03-31 GMT"
# 警告メッセージ:
#1: In as.POSIXct.POSIXlt(lt) : unknown timezone 'JST'
#2: In as.POSIXlt.POSIXct(ct) : unknown timezone 'JST'
#3: In as.POSIXct.POSIXlt(t) : unknown timezone 'JST'
#4: In as.POSIXlt.POSIXct(ct) : unknown timezone 'JST'
#5: In as.POSIXlt.POSIXct(x, tz) : unknown timezone 'JST'
ymd("2015-03-31", tz = "Asia/Tokyo")
#[1] "2015-03-31 JST"
years¶
years(1:12)
# [1] "1y 0m 0d 0H 0M 0S" "2y 0m 0d 0H 0M 0S" "3y 0m 0d 0H 0M 0S" "4y 0m 0d 0H 0M 0S"
# [5] "5y 0m 0d 0H 0M 0S" "6y 0m 0d 0H 0M 0S" "7y 0m 0d 0H 0M 0S" "8y 0m 0d 0H 0M 0S"
# [9] "9y 0m 0d 0H 0M 0S" "10y 0m 0d 0H 0M 0S" "11y 0m 0d 0H 0M 0S" "12y 0m 0d 0H 0M 0S"
ymd("2015-03-31") %y-% years(1:12)
# エラー: 関数 "%y-%" を見つけることができませんでした
ymd("2015-03-31") %Y-% years(1:12)
# エラー: 関数 "%Y-%" を見つけることができませんでした
ymd("2015-03-31") %d-% years(1:12)
# エラー: 関数 "%d-%" を見つけることができませんでした
ymd("2015-03-31") %m-% years(1:12)
# [1] "2014-03-31 UTC" "2013-03-31 UTC" "2012-03-31 UTC" "2011-03-31 UTC" "2010-03-31 UTC"
# [6] "2009-03-31 UTC" "2008-03-31 UTC" "2007-03-31 UTC" "2006-03-31 UTC" "2005-03-31 UTC"
#[11] "2004-03-31 UTC" "2003-03-31 UTC"