Why can't I directly connect xts?

> x <- data.frame(a = rnorm(10), b = rnorm(10), c = rnorm(10)) > x abc 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 abc 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 here

 > xx <- as.xts(x, order.by = as.Date(rownames(x))) > xx abc 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 > 

sure...

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

enter image description here

Not a huge problem, but I do not want to resort to my xts every time, or, more generally, I would like to know what happens here if there are other problems that can be detected.

+6
source share
3 answers

xts object is a matrix plus an index, so you cannot just pass an object to boxplot() . If you look at 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 

You can access the matrix through coredata() :

 coredata(xx) # abc # [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 

What you can use directly, but you would use a matrix:

 boxplot(coredata(xx)) 

enter image description here

If you want to use the index of the xts object, you simply use 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" 
+5
source

Because theres no boxplot.xts function. Write this and you can magically make boxplot (anxtsobject). If the xts author likes this, he might even get into the package. Oh, this can only be true if xts are classes S3 ...

Can you do hist (anxtsobject)?

+3
source

You can use the PerformanceAnalytics package, for example:

 library(PerformanceAnalytics) chart.Boxplot(xx) 

enter image description here

Internally, the xts object xts forced into data.frame , then boxplot can be called:

 library(PerformanceAnalytics) R <- checkData(xx, method = "data.frame") boxplot(R) 
+3
source

Source: https://habr.com/ru/post/947399/


All Articles