2013-06-16 28 views
6
もちろんの
> x <- data.frame(a = rnorm(10), b = rnorm(10), c = rnorm(10)) 
> x 
      a   b   c 
1 -1.09651022 -0.7416278 0.209405373 
2 1.53644398 -0.9463432 0.374955227 
3 1.71132675 -0.3828052 2.024143398 
4 -1.10622882 -0.3599187 -0.808780103 
5 -0.49616562 0.7061180 0.644142118 
6 -1.75452442 0.3890812 -0.623815889 
7 0.06315648 0.5103820 -1.501873998 
8 0.64856129 -1.0973679 1.432024595 
9 -0.62828873 -0.3159317 0.183674189 
10 -0.82657934 1.6376569 -0.003601196 
> rownames(x) <- as.Date(Sys.Date() - 9:0) 
> x 
        a   b   c 
2013-06-07 -1.09651022 -0.7416278 0.209405373 
2013-06-08 1.53644398 -0.9463432 0.374955227 
2013-06-09 1.71132675 -0.3828052 2.024143398 
2013-06-10 -1.10622882 -0.3599187 -0.808780103 
2013-06-11 -0.49616562 0.7061180 0.644142118 
2013-06-12 -1.75452442 0.3890812 -0.623815889 
2013-06-13 0.06315648 0.5103820 -1.501873998 
2013-06-14 0.64856129 -1.0973679 1.432024595 
2013-06-15 -0.62828873 -0.3159317 0.183674189 
2013-06-16 -0.82657934 1.6376569 -0.003601196 
> class(x) 
[1] "data.frame" 
> boxplot(x) 

enter image description herextsを直接boxplotできないのはなぜですか?

> xx <- as.xts(x, order.by = as.Date(rownames(x))) 
> xx 
        a   b   c 
2013-06-07 -1.09651022 -0.7416278 0.209405373 
2013-06-08 1.53644398 -0.9463432 0.374955227 
2013-06-09 1.71132675 -0.3828052 2.024143398 
2013-06-10 -1.10622882 -0.3599187 -0.808780103 
2013-06-11 -0.49616562 0.7061180 0.644142118 
2013-06-12 -1.75452442 0.3890812 -0.623815889 
2013-06-13 0.06315648 0.5103820 -1.501873998 
2013-06-14 0.64856129 -1.0973679 1.432024595 
2013-06-15 -0.62828873 -0.3159317 0.183674189 
2013-06-16 -0.82657934 1.6376569 -0.003601196 
> class(xx) 
[1] "xts" "zoo" 
> boxplot(xx) 
Error in try.xts(c(2.12199579096527e-314, 2.12199579096527e-314, 0, 2.12199579096527e-314, : 
    Error in xts(coredata(x), order.by = index(x), .CLASS = "xts", ...) : order.by requires an appropriate time-based object 
> 

...

> boxplot(as.matrix(xx), col = "red") 

enter image description here

ない大きな問題が、私は私のXTSのたびに強制する必要はしたくない、またはより一般的には、これが明らかになるかもしれない他の問題がある場合に、ここで何が起こっているのかを知りたいと思います。

答えて

5

xtsオブジェクトは、マトリックスにインデックスを加えたものなので、オブジェクトをboxplot()に渡すことはできません。あなたはstr(xx)を見れば:

# An ‘xts’ object from 2013-06-07 to 2013-06-16 containing: 
# Data: num [1:10, 1:3] 0.321 -0.462 1.715 0.575 0.83 ... 
# - attr(*, "dimnames")=List of 2 
# ..$ : NULL 
# ..$ : chr [1:3] "a" "b" "c" 
# Indexed by objects of class: [Date] TZ: 
# xts Attributes: 
# NULL 

あなたがcoredata()て行列にアクセスすることができます。

boxplot(coredata(xx)) 

enter image description here

:あなたが直接使用することができます

coredata(xx) 
#    a   b   c 
# [1,] 0.32120813 -0.07370657 -0.601288169 
# [2,] -0.46154742 -1.09475940 3.028664653 
# [3,] 1.71515544 -0.31000454 -0.009281175 
# [4,] 0.57482616 -0.06260991 1.198034802 
# [5,] 0.83015688 -2.49614565 -1.689812377 
# [6,] 0.01748081 -0.55332675 2.391426111 
# [7,] 0.69852800 -0.10337251 -0.267939285 
# [8,] 0.75139113 -0.17427970 -0.561434122 
# [9,] -0.68942598 0.18685817 -1.508917140 
# [10,] -0.76381007 -2.44387628 0.290524821 

は、しかし、あなたは、行列を使用します

0のインデックスを使用する場合はオブジェクト、あなただけindex()を使用します。

index(xx) 
# [1] "2013-06-07" "2013-06-08" "2013-06-09" "2013-06-10" "2013-06-11" "2013-06-12" "2013-06-13" "2013-06-14" "2013-06-15" 
# [10] "2013-06-16" 
+0

オーケーありがとう。これは問題をうまく説明します。私は毎日の使用では、xtsオブジェクトは行列と同様に動作して、ボックスプロットで「うまく動作する」と仮定していると推測します。私がなぜそうでないのか理解している限り、私は将来遭遇する可能性のある他の問題について洞察を得て、デバッグを助けます。 –

3

theresの無boxplot.xts機能なので。それを書くと、魔法のようにboxplot(anxtsobject)をすることができます。 xtsの作者がそれを好きなら、パッケージに入るかもしれません。ああ、xtsがS3クラスの場合にのみ当てはまります...

hist(anxtsobject)はできますか?

+0

+1! "ああ、xtsがS3クラスの場合にのみ当てはまるかもしれません..."ヒストリの場合、あなたは 'chart.Histogram(anxtsobject)'のようなことをすることができます... – agstudy

3

あなたは、例えば、このようPerformanceAnalyticsパッケージを使用することができます。

library(PerformanceAnalytics) 
chart.Boxplot(xx) 

enter image description here

を内部的には、xtsオブジェクトはdata.frameに強制変換され、その後、boxplotを呼び出すことができます。

library(PerformanceAnalytics) 
R <- checkData(xx, method = "data.frame") 
boxplot(R) 
関連する問題