2012-05-13 8 views
2

私は、分析とプロットのために時間値(xtsまたはzooオブジェクトから発生)を含むデータフレームを定期的に構築します。ここでは例です:1つまたは複数の時系列を含むデータフレームからのプロット

library(xts) 

x1 <- xts(rnorm(10), as.Date("2012-01-01") + 0:9) 
x2 <- xts(rnorm(10), as.Date("2012-01-04") + 0:9) 

(df <- data.frame(merge(x1=x1, x2=x2), v1=4:16, v2=rnorm(13)))  

        x1   x2 v1   v2 
2012-01-01 0.1930827   NA 4 1.05972724 
2012-01-02 0.4429592   NA 5 -1.89299068 
2012-01-03 1.6657630   NA 6 0.70445966 
2012-01-04 -0.2765922 -0.26728223 7 0.35336959 
2012-01-05 -0.1756590 -2.04888130 8 0.90129924 
2012-01-06 -2.4849132 0.49400975 9 1.54486914 
2012-01-07 -0.9993353 -1.09308203 10 1.16600015 
2012-01-08 -0.7326309 0.55781566 11 0.37178542 
2012-01-09 -0.2973543 -0.59872496 12 0.07512468 
2012-01-10 -1.5061380 0.08567125 13 1.77494367 
2012-01-11   NA 0.81835375 14 -0.38211167 
2012-01-12   NA 1.30131894 15 -1.09220795 
2012-01-13   NA -1.29505649 16 1.27148069 

時系列をプロットするには、私は横軸のas.Date(row.names(df))を使用する必要があります。例:過去に、私は次のコードを使用してデータフレームに列を追加しましたので、

plot(as.Date(row.names(df)), df$x1, type="l", xlab="", ylab="Test", main="Using row.names()", col="red") 
lines(as.Date(row.names(df)), df$x2, col="blue")  
lines(as.Date(row.names(df)), df$v2, col="green")  

それは、何度も繰り返しas.Date(row.names(df))を使用するための本当の痛みです:

(df <- cbind(df, tim=as.Date(row.names(df))))  

私は今、プロットすることができます時系列:

with(df, { 
    plot(tim, x1, type="l", xlab="", ylab="Test", main="Using a new tim column", col="red") 
    lines(tim, x2, col="blue") 
    lines(tim, v2, col="green") 
}) 

は、この技術は動作しますが、tim列がずさんな感じと付け加えました。これを行うためのより良い/よりクリーンな方法がありますか?

編集1(2012-05-13)=====================

データフレームを使用している理由は、データフレームを必要とする1つまたは複数のパッケージにこのデータが頻繁に供給されることや、一部の変数で非数値データを表す必要があるためです。

+0

data.frameはXTS /動物園の値を "含める" ことはできません。 'data.frame()'は '...'の各オブジェクトを 'as.data.frame'を介してdata.frameに変換します。ですから、この質問はxts/zooオブジェクトとは関係ありません。 –

+0

@Joshua - タイトルを変更してタグを削除する必要がありますか? –

+0

これは、「tim」列を追加するというあなたの解決策が、おそらく最も簡単で最も単純なものだとは思いますが、助けてくれる人たちの注目を集めるのに役立つかもしれません。 –

答えて

2

私はできるだけ多くの動物園施設に固執します:

library(xts) 
x1 <- xts(rnorm(10), as.Date("2012-01-01") + 0:9) 
x2 <- xts(rnorm(10), as.Date("2012-01-04") + 0:9) 

dz <- merge(x1=x1, x2=x2); dz$v1=4:16; dz$v2=rnorm(13)  
# keeps it a zoo object rather than a data.frame 

with(dz, plot(x1, type="l", xlab="", ylab="Test", main="Not using row.names()\nStick with zoo")) 
lines(dz$x2, col="blue")  
lines(dz$v2, col="green") 

enter image description here

+0

私は、データフレームの必要性についてより具体的にすべきでした。私は私の質問の最後に編集1を追加しました。 –

関連する問題