実際、上記 (および SO の他の場所) で述べたように、文字列を日付に変換するには、月の特定の日付が必要です。as.Date()
マニュアルページから:
日付文字列が日付を完全に指定していない場合、返される回答はシステム固有のものである可能性があります。最も一般的な動作は、欠落している年、月、または日が現在のものであると想定することです。日付が正しく指定されていない場合、信頼できる実装ではエラーが発生し、日付は NA として報告されます。残念ながら、一部の一般的な実装 ( などglibc
) は信頼性が低く、意図した意味を推測します。
"01"
簡単な解決策は、日付を各日付に貼り付け、を使用strptime()
してその月の最初の日として示すことです。
R での日付と時刻の処理についてもう少し背景を知りたい場合:
R では、時間を使用POSIXct
し、POSIXlt
クラスと日付でクラスを使用しDate
ます。
日付は 1970 年 1 月 1 日からの日数として保存され、時刻は 1970 年 1 月 1 日からの秒数として保存されます。
たとえば、次のようになります。
d <- as.Date("1971-01-01")
unclass(d) # one year after 1970-01-01
# [1] 365
pct <- Sys.time() # in POSIXct
unclass(pct) # number of seconds since 1970-01-01
# [1] 1450276559
plt <- as.POSIXlt(pct)
up <- unclass(plt) # up is now a list containing the components of time
names(up)
# [1] "sec" "min" "hour" "mday" "mon" "year" "wday" "yday" "isdst" "zone"
# [11] "gmtoff"
up$hour
# [1] 9
日付と時刻の操作を実行するには:
plt - as.POSIXlt(d)
# Time difference of 16420.61 days
日付を処理するには、次を使用できますstrptime()
(これらの例はマニュアルページから借用):
strptime("20/2/06 11:16:16.683", "%d/%m/%y %H:%M:%OS")
# [1] "2006-02-20 11:16:16 EST"
# And in vectorized form:
dates <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")
strptime(dates, "%d%b%Y")
# [1] "1960-01-01 EST" "1960-01-02 EST" "1960-03-31 EST" "1960-07-30 EDT"