2017-01-31 10 views
0

csvファイルから数字のリストを読みました。それは731961,731962,731966,731967,731968のような数値を含み、それらは2004-01-15,2004-01-16,2004-01-20,2004-01-21,2004-01-22に対応すべきです。シリアル日付番号を正しい日付に変換できませんでした

しかし、Rの数値を変換しようとすると、結果の日付が間違っていました(たとえば、as.Date(731961,origin="1900-01-01") --> "3904-01-17")。

私はここで何が間違っていましたか?

+0

'as.Date'は整数で指定された起点からの日数を示します。 1900年から731 +千日は約2000年です。 – lmo

+2

origin = "0-01-01"を試してください。 – Haboryme

答えて

1

コメントのフォローアップでは、日付の出所が間違っているという問題があります。あなたは、日付を計算する場合ことを確認し、それらがどのように遠く離れて見ることができます。

inDates <- c(731961,731962,731966,731967,731968) 
correctDates <- as.Date(c("2004-01-15","2004-01-16","2004-01-20","2004-01-21","2004-01-22")) 

wrongDates <- as.Date(inDates, origin = "1900-01-01") 

difftime(wrongDates, correctDates, units = "days") 

彼らがオフの正しい日付から693962日であり、起源が間違っていることを示唆しています。 @Haborymeのように原点を0-01-01に設定すると近づくが、まだ一日遅れる。私の推測では、うるう年のエラーがあるか、シリアル番号が年0の1月1日を0ではなく1にしたかったと思います。原点をBCE日付に設定することはできません(おそらく方法はありますが私は周りに仕事を見つけたとき、私はそれを押収した)。したがって、入力日付から1を減算し、原点を設定します。

as.Date(inDates - 1, origin = "0000/01/01") 

しかし、これもまた別の方法を示唆しています。このような通し番号が日常的にあり、起源が変わった場合、起源を見つけるために遊んでいることは後部の痛みです。ただし、日付の一部を知っていて、すべてが同じ原点を使用していることを確認できる場合は、同じ原点を使用している場合は、正しい入力を得るために、それぞれの新しい入力から上からoffByを差し引くことができます。

as.Date(inDates - as.numeric(offBy[1]), origin = "1900-01-01") 

正しい日付も指定します。

関連する問題