49

基準日と測定日の差とソースの半減期 (年単位で測定) に基づいて、ソースのアクティビティを修正したいと考えています。私が持っていると言う

ref_date <- as.Date('06/01/08',format='%d/%m/%y')

および同じ日付形式の my の列data.frame、たとえば、

today <- as.Date(Sys.Date(), format='%d/%m/%y')

lubridateパッケージを使用して、これらの日付間の年数を見つけることができます

year(today)-year(ref_date)
[1] 5

たとえば、浮動小数点の回答today - ref_date= 5.2y を取得するために使用できる関数はありますか?

4

7 に答える 7

61

はい、もちろん、difftime()数値として使用します。

R> as.numeric(difftime(as.Date("2003-04-05"), as.Date("2001-01-01"), 
+                      unit="weeks"))/52.25
[1] 2.2529
R> 

年のカウントに関しては少しあいまいなため、52.25でスケーリングされた週に切り替える必要があることに注意してください---2月29日は4年ごとに発生しますが、100日ごとではありません。

したがって、それを定義する必要があります。difftime()週までのすべての時間単位を処理します。定数でない「分子」と同じ理由で、月を実行することはできません。

于 2013-03-22T11:36:13.757 に答える
0

年の日付差 (浮動小数点)を取得するには、日付を年の 10 進数に変換し、その差を計算します。

#Example Dates
x <- as.Date(c("2001-01-01", "2003-04-05"))

#Convert Date to decimal year:
date2DYear <- function(x) {
  as.numeric(format(x,"%Y")) + #Get Year an add
    (as.numeric(format(x,"%j")) - 0.5) / #Day of the year divided by
    as.numeric(format(as.Date(paste0(format(x,"%Y"), "-12-31")),"%j")) #days of the year
}
diff(date2DYear(x)) #Get the difference in years
#[1] 2.257534

0.5あなたが一日の始まりか終わりか分からず、で始まるので、私はその年の一日から%j引きます1

と の違いは5 年である必要はない2012-03-01と思います。2012 年は 366 日、2017 年は 365 日で、1 年のうち 61 日と60 日であるためです。2017-03-012012-03-012017-03-01

x <- as.Date(c("2012-03-01", "2017-03-01"))
diff(date2DYear(x))
#[1] 4.997713

累積時間差を作成する場合、 usingtime_lengthintervalfromは必ずしも同じ結果になるとは限らないことに注意してください。lubridate

library(lubridate)

x <- as.Date(c("2012-01-01", "2012-03-01", "2012-12-31"))
time_length(interval(x[1], x[3]), "years")
#[1] 0.9972678
time_length(interval(x[1], x[2]), "years") +
 time_length(interval(x[2], x[3]), "years")
#[1] 0.9995509 #!
diff(date2DYear(x[c(1,3)]))
#[1] 0.9972678
diff(date2DYear(x[c(1,2)])) + diff(date2DYear(x[c(2,3)]))
#[1] 0.9972678

x <- as.Date(c("2013-01-01", "2013-03-01", "2013-12-31"))
time_length(interval(x[1], x[3]), "years")
#[1] 0.9972603
time_length(interval(x[1], x[2]), "years") +
 time_length(interval(x[2], x[3]), "years")
#[1] 0.9972603
diff(date2DYear(x[c(1,3)]))
#[1] 0.9972603
diff(date2DYear(x[c(1,2)])) + diff(date2DYear(x[c(2,3)]))
#[1] 0.9972603
于 2020-09-09T16:04:49.017 に答える