まず、日付と時刻を別々の列に投稿し、Rで日時に変換することを検討していたとしましょう。ただし、この場合は機能しません。
いくつかの測定値を含むCSVファイルがあり、1列目から5列目まで、Year、DayOfYear、Hour、Minute、Secondの形式のデータスタンプがあります。変数名datのこのようなもの:
Year Day Hour Min Sec. E1.S1 E1.S2 E1.S3 E1.S4 E1.S5 E1.S6 E1.S7 E1.S8 E2.S1 E2.S2 E2.S3 E2.S4 E2.S5
1 2003 241 0 1 5.87 0.296 0.394 0.657 0.427 0.362 0.559 0.460 0.460 0.526 0.362 0.362 0.493 0.460
2 2003 241 0 5 18.52 0.486 0.543 0.572 0.629 0.372 0.457 0.429 0.829 0.486 0.400 0.286 0.543 0.457
3 2003 241 0 10 10.65 0.514 0.629 0.371 0.657 0.457 0.657 0.429 0.429 0.314 0.400 0.286 0.286 0.343
4 2003 241 0 15 2.76 0.575 0.301 0.411 0.630 0.274 0.466 0.466 0.548 0.438 0.329 0.438 0.493 0.301
5 2003 241 0 20 7.06 0.329 0.274 0.657 0.329 0.521 0.247 0.356 0.246 0.411 0.356 0.438 0.520 0.356
6 2003 241 0 25 11.35 0.486 0.314 0.343 0.372 0.314 0.343 0.457 0.343 0.257 0.343 0.229 0.543 0.372
必要なのは、これら5つの日付フィールドすべてを1つのタイムスタンプフィールドに「結合」して、データを正しくプロットし、Rで操作できるようにすることです。
ISOdatetime関数を見ましたが、動作させることができません(さらに、dayOfYearフィールドがないようです)。私もPOSIXltを見て、次のようなことを試しました。
test = within(dat, datetime <- as.POSIXlt(paste(Year, Day, Hour, Min, Sec.),
format = "%Y %D %H %M %S"))
しかし、取得するのは、データフレームに追加された空の日時フィールドだけです。
何か案は?
編集:
以下の投稿の正解が指摘しているように、問題はdayOfYear形式のフィールドハンドルにありました。%Dの代わりに%jを使用する必要があり、日時の列を取得するにはそれで十分でした。POSIXltは整数秒しか使用していないように見えるため、秒を修正して丸めました。
teste = within(dat, datetime <- as.POSIXlt(paste(Year, Day, Hour, Min, round(Sec.)),
format = "%Y %j %H %M %S"))
皆さん、ありがとうございました!