包含不同类型的 xts-object 的绘图问题
Plot problem with xts-object containing different types
我想绘制(特别是 plot.xts)使用 xts 包创建的时间序列。我注意到,plot.xts 函数以某种方式不将包含不同类型(例如日期、数字等)的 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"
现在,如果我不将日期列包含到数据框,特别是 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
所以我的问题是,testXTS1 和 testXTS2 有什么区别?它们似乎都是 xts-objetcts,但在某种程度上 testXTS1 不是吗?
抱歉,如果这是转贴,我还找不到这个问题的答案。
提前致谢!
问候
最大值
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
我想绘制(特别是 plot.xts)使用 xts 包创建的时间序列。我注意到,plot.xts 函数以某种方式不将包含不同类型(例如日期、数字等)的 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"
现在,如果我不将日期列包含到数据框,特别是 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
所以我的问题是,testXTS1 和 testXTS2 有什么区别?它们似乎都是 xts-objetcts,但在某种程度上 testXTS1 不是吗?
抱歉,如果这是转贴,我还找不到这个问题的答案。 提前致谢!
问候 最大值
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