2013-06-16 25 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 hereTại sao tôi không thể cắt xén trực tiếp một xts?

> 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 
> 

tất nhiên ...

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

enter image description here

Không phải là một vấn đề lớn nhưng tôi không muốn phải ép buộc của XTS của tôi mọi lúc, hoặc nói chung, tôi muốn biết những gì đang xảy ra ở đây trong trường hợp có những vấn đề khác mà điều này có thể phát hiện ra.

Trả lời

5

Đối tượng xts là ma trận cộng với chỉ mục, vì vậy bạn không thể chuyển đối tượng đến boxplot(). Nếu bạn nhìn vào 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 

Bạn có thể truy cập vào ma trận thông qua coredata():

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 

Mà bạn có thể sử dụng trực tiếp tuy nhiên bạn sẽ sử dụng một ma trận:

boxplot(coredata(xx)) 

enter image description here

Nếu bạn muốn sử dụng chỉ mục của 0 Đối tượng, bạn chỉ cần sử dụng 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

Okay cảm ơn. Điều này giải thích vấn đề một cách độc đáo. Tôi đoán trong việc sử dụng hàng ngày các đối tượng xts hành xử tương tự như ma trận mà tôi cho rằng chúng sẽ "chỉ hoạt động" với các ô vuông. Miễn là tôi hiểu tại sao họ không hiểu, tôi cũng có được một cái nhìn sâu sắc về những vấn đề khác mà tôi có thể gặp phải trong tương lai, giúp gỡ lỗi. –

3

Vì không có chức năng boxplot.xts. Viết nó, và kỳ diệu bạn có thể làm boxplot (lo lắng). Nếu tác giả của xts thích nó, nó thậm chí có thể nhận được vào gói. Ồ, điều đó có thể chỉ đúng nếu xts là các lớp S3 ...

Bạn có thể làm hist (lo lắng không)?

+0

+1! cho "Ồ, điều đó có thể đúng nếu xts là lớp S3 ..." Đối với 'hist' bạn có thể làm một cái gì đó như' chart.Histogram (wortsobject) '... – agstudy

3

Bạn có thể sử dụng PerformanceAnalytics gói như thế này ví dụ:

library(PerformanceAnalytics) 
chart.Boxplot(xx) 

enter image description here

Bên trong, các đối tượng xts được buộc thành data.frame, sau đó boxplot có thể được gọi là:

library(PerformanceAnalytics) 
R <- checkData(xx, method = "data.frame") 
boxplot(R) 
Các vấn đề liên quan