このdifftime()
関数を使用すると、2 つの日付の差を日単位または週単位で簡単に計算できますが、差を月単位または年単位で計算するオプションはありません。その理由はありますか?このタスクを実行する関数を知っていますか?
質問する
5570 次
2 に答える
15
コメントから:月と年は正確な時間単位ではありません。つまり、その長さは異なります (月は 28、29、30、31 日、年は 365 または 366 になります)。これらの単位のいずれかの値を固定する場合 (たとえば、月 = 30 日、年 = 365 日)、日数を固定値で割るだけで、必要difftime
な単位の差を得ることができます。または、2 つの日付の間の完全な月数のようなものが必要な場合は、次のようにすることができます。
date1 = as.Date('2012-1-2')
date2 = as.Date('2012-7-5')
length(seq(from=date1, to=date2, by='month')) - 1
# [1] 6
または数週間:
length(seq(from=date1, to=date2, by='week')) - 1
# [1] 26
于 2013-10-30T16:05:42.500 に答える
4
POSIXlt
datetime-class は、months
およびを含むいくつかの抽出メソッドのリストquarter
です。(関数は文字値を返すため、リストから整数months
の項目を抽出する必要があります。)ベクトル内の連続する項目から月の値を減算する場合は、次のようになります。mon
PLvec <- as.POSIXlt(vec)
PLvec[-1]$mon - PLvec[-length(PLvec)]$mon
vec <- seq(from = as.Date('2012-1-2'),
to = as.Date('2012-7-5'),
by="60 days")
PLvec <- as.POSIXlt(vec)
PLvec[-1]$mon - PLvec[-length(PLvec)]$mon
#[1] 2 2 1
POSIXlt に分類された項目については、実際にはリストであり、data.frame ストレージとうまく連携しないため、自分自身を教育する必要があります。
dput(as.POSIXlt(Sys.time()))
structure(list(sec = 24.0051879882812, min = 5L, hour = 9L, mday = 30L,
mon = 9L, year = 113L, wday = 3L, yday = 302L, isdst = 1L), .Names = c("sec",
"min", "hour", "mday", "mon", "year", "wday", "yday", "isdst"
), class = c("POSIXlt", "POSIXt"), tzone = c("", "PST", "PDT"
))
于 2013-10-30T16:08:07.483 に答える