2012-01-18 11 views
1
> my.lt <- strptime("2003-02-05 03:00:02", format="%Y-%m-%d %H:%M:%S") 
> x <- data.frame(d=my.lt) 
> class(x$d) 
[1] "POSIXct" "POSIXt" 

なぜdata.frameがPOSIXltオブジェクトからPOSIXctオブジェクトにx $ dを変更したのか分かりません。私はR:データフレーム内のデータ時間オブジェクト

> x$d = my.lt 

をすれば今それから私は私が欲しいものだが、これは醜いです。誰にでも教えてもらえますか?1)なぜこれが起こったのですか? 2)列の1つがPOSIXltであるデータフレームをきちんとして初期化する方法。

ありがとうございます。

答えて

5

それは?data.frameの詳細セクションの第三段落で言うように:

「data.frameが」TRUE =オプション(」as.data.frameを呼び出すことにより、データフレームにその引数のそれぞれを変換し、 ) '。

つまり、as.data.frame.POSIXltが呼び出されています。それが起こっだから、なぜだ

function (x, row.names = NULL, optional = FALSE, ...) 
{ 
    value <- as.data.frame.POSIXct(as.POSIXct(x), row.names, 
     optional, ...) 
    if (!optional) 
     names(value) <- deparse(substitute(x))[[1L]] 
    value 
} 

:次のように定義されています。私はdata.frameコンストラクタを使用して、それを行うにはきれいな方法を考えることはできませんが、ここでその場しのぎのビットです:

x <- data.frame(d=as.data.frame.vector(my.lt)) 

これはvectorメソッドを使用してdata.frameにごPOSIXltオブジェクトに変換します。

x <- data.frame(d=as.data.frame.POSIXct(my.lt)) 
str(x) 
# 'data.frame': 1 obs. of 1 variable: 
# $ my.lt: POSIXlt, format: "2003-02-05 03:00:02" 
+0

1ニースの答え:あなたは本当には後で自分自身を混同したい場合は、POSIXctメソッドを使用することができます。 – Andrie

関連する問題