3

このdifftime()関数を使用すると、2 つの日付の差を日単位または週単位で簡単に計算できますが、差を月単位または年単位で計算するオプションはありません。その理由はありますか?このタスクを実行する関数を知っていますか?

4

2 に答える 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

POSIXltdatetime-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 に答える