r - 绘制包含不同类型的 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
所以我的问题是, 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
推荐阅读
- php - yii2 - 如何翻译一个依赖复数和性别的单词
- python - 如何从 python 中的 fhirclient-4.0.0 prepare() 方法修复“FHIRValidationError”?
- python-3.x - 如何 .read 以“,”(逗号)作为分隔符的文件,该文件将用“,”(逗号)分隔的十进制数字分隔?
- javascript - 如何从JS推送多维数组中的值
- selenium - 如何在 Robot Framework 中选择单选按钮(或复选框)而不知道它们的确切组名等?
- python - Python - 导入的函数不会修改局部变量
- ionic4 - 如何使用 where 从 AngularFirestore 返回数据
- java - 如何开始然后停止运动
- angular - VScode 角度材质语法
- android - 如何修复 Android 应用程序中的 ClassCastException?