【问题标题】:Plot problem with xts-object containing different types绘制包含不同类型的 xts 对象的问题
【发布时间】:2020-01-20 14:27:18
【问题描述】:

我想绘制(特别是 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 不是?

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

问候 最大

【问题讨论】:

    标签: r time-series xts


    【解决方案1】:

    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
    

    【讨论】:

    • 非常感谢!所以每次我创建一个包含多种数据类型的 xts 对象时,它都会自动将值更改为字符串?
    • @Plsdontjudgeme111,是的,这是正确的。创建 xts 对象时必须小心。
    • 你知道如何检查我的 xts-matrix 的特定值的数据类型/类吗?
    猜你喜欢
    • 2018-10-07
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    相关资源
    最近更新 更多