2009-11-26 13 views
6

私はテーブルを読んでおり、タイムスタンプを記述する文字列を含んでいます。日付/時刻の理解(POSIXcとPOSIXct)R

R> Q$ts <- ts 
Error in `$<-.data.frame`(`*tmp*`, "ts", value = list(sec = c(0, 0, 0, : 
    replacement has 9 rows, data has 5 
:私はちょうど私がdata.frameにdatetime型の列を保存しようとした場合、私は好奇心のエラーを取得
R> Q <- read.table(textConnection(' 
       tsstring 
1 "2009-09-30 10:00:00" 
2 "2009-09-30 10:15:00" 
3 "2009-09-30 10:35:00" 
4 "2009-09-30 10:45:00" 
5 "2009-09-30 11:00:00" 
'), as.is=TRUE, header=TRUE) 
R> ts <- strptime(Q$tsstring, "%Y-%m-%d %H:%M:%S", tz="UTC") 

...文字列から、内蔵のdatetime型に変換したいです

私はdata.frameで開催された数値表現を通過した場合、それが動作します...

R> EPOCH <- strptime("1970-01-01 00:00:00", "%Y-%m-%d %H:%M:%S", tz="UTC") 
R> Q$minutes <- as.numeric(difftime(ts, EPOCH, tz="UTC"), units="mins") 
R> Q$ts <- EPOCH + 60*Q$minutes 

状況を理解する上で任意のヘルプ?

答えて

12

strptime戻っクラスPOSIXlt、あなたはデータフレームにPOSIXctが必要になります。

R> class(strptime("2009-09-30 10:00:00", "%Y-%m-%d %H:%M:%S", tz="UTC")) 
[1] "POSIXt" "POSIXlt" 
R> class(as.POSIXct("2009-09-30 10:00:00", "%Y-%m-%d %H:%M:%S", tz="UTC")) 
[1] "POSIXt" "POSIXct" 

クラスPOSIXctは表し数値ベクトルとして 1970年初め以来の秒数(署名)を。クラスPOSIXltは秒、分、時間、MDAY、月、年を表すベクトルの名前付きリスト、などである

R> unclass(strptime("2009-09-30 10:00:00", "%Y-%m-%d %H:%M:%S", tz="UTC")) 
$sec 
[1] 0 
$min 
[1] 0 
$hour 
[1] 10 
$mday 
[1] 30 
$mon 
[1] 8 
$year 
[1] 109 
$wday 
[1] 3 
$yday 
[1] 272 
$isdst 
[1] 0 
attr(,"tzone") 
[1] "UTC" 

R> unclass(as.POSIXct("2009-09-30 10:00:00", "%Y-%m-%d %H:%M:%S", tz="UTC")) 
[1] 1.254e+09 
attr(,"tzone") 
[1] "UTC" 
+0

注意すべきもう一つの興味深い事はPOSIXltオブジェクトの長さは、()は常に9の長さであるということです$ minなどの個々のコンポーネントの数は、オブジェクト内のタイムスタンプの数を反映するように増加します。 – Sharpie

+0

もうひとつ面白いこと:私は数字を付け加えると 'POSIXlt'に何が起こるのかを調べるために使用しました。実際には結果は 'POST'です。これは私が最初に観察していたことを説明しています。 – mariotomo