首页 > 解决方案 > 绘制包含不同类型的 xts 对象的问题

问题描述

我想绘制(特别是 plot.xts)使用 xts 包创建的时间序列。我注意到,包含不同类型(例如日期、数字等)的 xts 对象在某种程度上不会被 plot.xts 函数视为 xts 对象。如果我只使用一种类型(数字),我就没有绘图问题。包含不同类型的 xts-objects 和仅包含一种类型的 xts-objects 之间有什么不同?

这是我的意思的一个小例子:

testDate<-as.Date(c("2014-12-31","2015-01-03","2015-01-04"))
testFrame1<-data.frame(Date=testDate, A=c(1,2,3), B=c(1,3,5))
testXTS1<-as.xts(testFrame1, order.by=testDate)
plot.xts(testXTS1$A)
#Which yields to this error
#Error in plot.xts(testXTS1$A) : 'x' must be a time-series object

然而

class(testXTS1$A)
#states that testXTS1$A is of class "xts" "zoo"

现在,如果我不将 Date 列包含到数据框中,特别是 xts,我在绘制数据时没有任何问题。

testDate<-as.Date(c("2014-12-31","2015-01-03","2015-01-04"))
testFrame2<-data.frame(A=c(1,2,3), B=c(1,3,5))
testXTS2<-as.xts(testFrame2, order.by=testDate)
plot.xts(testXTS2$A)
#Plots everything as intended, no error message

另一个奇怪的事情是我不能在没有强制转换的情况下使用testXTS1进行计算。

testXTS1$A+testXTS1$B
#Error in `+.default`(testXTS1$A, testXTS1$B) : non-numeric argument to binary operator

testXTS2$A+testXTS2$B
#works fine again

所以我的问题是, testXTS1testXTS2有什么不同?它们似乎都是 xts-objetcts,但在某种程度上testXTS1不是?

抱歉,如果这是转发,我还没有找到这个问题的答案。提前致谢!

问候马克斯

标签: rtime-seriesxts

解决方案


testXTS1 是一个 xts 对象,但它填充了字符,因为矩阵还包含日期列。如果您只打印 testXTS1(见下文),您可以看到所有值都用引号 (") 括起来。另一方面,testXTS2 是一个 xts,因为它的索引是日期,矩阵是用数字填充的。这也是您的计算不起作用的原因。

创建 xts 对象时,您需要从 data.frame 中排除日期列。

# printing objects to show difference:
testXTS1
           Date         A   B  
2014-12-31 "2014-12-31" "1" "1"
2015-01-03 "2015-01-03" "2" "3"
2015-01-04 "2015-01-04" "3" "5"

testXTS2
           A B
2014-12-31 1 1
2015-01-03 2 3
2015-01-04 3 5

推荐阅读