1

まず、日付と時刻を別々の列に投稿し、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"))

皆さん、ありがとうございました!

4

1 に答える 1

1

ここで、フォーマット %j で使用するソリューションstrptime: 10 進数 (001–366) としての年間通算日。

私はdatがあなたのdata.frameであると仮定します。最初に日付列を貼り付けます

dat$date <- paste(paste(dat$Year,dat$Day,sep='/'),paste(dat$Hour,dat$Min,dat$Sec,sep=':'))

そしたら応募しますstrptime

dat$date <- strptime(dat$date,format ='%Y/%j %H:%M:%S')

dat$date
[1] "2003-08-29 00:01:05" "2003-08-29 00:05:18" "2003-08-29 00:10:10" "2003-08-29 00:15:02" "2003-08-29 00:20:07" "2003-08-29 00:25:11"

PS : すべての日付は同じ日です

于 2013-03-05T16:21:12.193 に答える