11

以下の積(単位は日)を正確に年月日に換算するにはどうすればよいdifftimeですか?

difftime(Sys.time(),"1931-04-10")
difftime(Sys.time(),"2012-04-10")

これは年と日ですが、どうすれば月を含めることができますか?

yd.conv<-function(days, print=TRUE){
    x<-days*0.00273790700698851
    x2<-floor(x)
    x3<-x-x2
    x4<-floor(x3*365.25)
    if (print) cat(x2,"years &",x4,"days\n")
    invisible(c(x2, x4))
}

yd.conv(difftime(Sys.time(),"1931-04-10"))
yd.conv(difftime(Sys.time(),"2012-04-10"))

月を定義する方法さえわかりません。4 週間は 1 か月または同じ月の日の経過と見なされますか。したがって、最初の日付が 2012 年 1 月 10 日で、現在が 2012 年 5 月 31 日の場合、後の月の定義では、0 年 5 か月 21 日になります。これはうまく機能しますが、元の日付がその月の 31 日で、終了日が 2 月 28 日である場合、これは 1 か月と見なされますか?

この質問を書いたとき、質問自体が進化したので、明確にしたほうがよいでしょう:

月を定義するための最良の (最も論理的なアプローチ) と、年、月、日の差分時間を見つける方法は何でしょうか?

4

4 に答える 4

6

あなたが何かをしているなら

difftime(Sys.time(), someDate)

someDateが何であるかを知っておく必要があることを暗示しています。その場合、これを POSIXct クラス オブジェクトに変換して、時間情報を直接抽出することができます (パッケージchronは、より多くのメソッドも提供します)。例えば

as.POSIXct(c(difftime(Sys.time(), someDate, units = "sec")), origin = someDate)

これにより、目的の日付オブジェクトが返されます。difftime にフィードするタイムゾーン tz がある場合は、それを as.POSIXct の tz パラメータに直接渡すこともできます。

日付オブジェクトができたので、次のようなことを実行できますmonths(.)。 chron がある場合はyears(.)、 and days(.)(順序付けられた要素を返します) を実行できます。

ここから、年、月、日の違いを個別に (適切な数値表現に変換して) より単純な計算を行うことができます。もちろん、someDateを POSIXct に変換する必要があります。

編集: 考え直しmonths(.)て、月の文字表現を返すため、効率的ではない可能性があります。少なくとも、数値表現を行うには少し処理が必要です (それほど難しくありません)。

于 2012-05-31T18:12:08.187 に答える
0

うーん。さまざまなユニット自体を見るのが最も賢明だと思います。したがって、まず日を比較し、次に月を比較し、次に年を比較します。各ポイントで、キャリーを導入して負の値を回避できます。

言い換えれば、difftime の製品を扱うのではなく、独自の difftime を再コーディングしてください。

于 2012-05-31T15:32:10.953 に答える
0

月の定義は difftime が開始された絶対時間に依存するため、単純に difftime を月に変換することはできません。

月数を正確に知るには、開始日または終了日を知る必要があります。

次に、たとえば、タイムスパンの最初の年の月数、タイムスパンの最後の年の月数を計算し、時間 12 の間の年数を追加できます。

于 2012-05-31T15:29:18.097 に答える
0

R は無知からこれらの機能を実装していません。difftimeオブジェクトは推移的です。任意の開始日の 700 日の違いは、うるう年があったかどうかによって異なる年数をもたらす可能性があります。同様に、数か月の場合、28 ~ 31 日かかります。研究目的で、これらの単位 (月と年) を頻繁に使用し、実用的には、1 か月を 30.5 日、1 年を 365.25 日と定義しています。この値を数値に変換して、R がユニットから噴出しないようにする必要があります。

于 2018-05-24T17:29:43.453 に答える