【问题标题】:R: adding a dummy variable column to xts timeseries objectR:将虚拟变量列添加到 xts 时间序列对象
【发布时间】:2017-02-25 20:21:08
【问题描述】:

我有一个 xts 时间序列对象,由 2015 年的日内交易数据组成。我想添加一个虚拟变量,将 1 表示为事件日或 0 表示非事件日。

由于虚拟变量本质上不是时间序列,我是否可以将其添加到我的交易数据中?

我应该如何构造虚拟列?

如何将其添加到现有的 xts 中?

R 新手,因此请在回答中尽可能具体。谢谢!

【问题讨论】:

  • 如果您希望人们在回答中尽可能具体,如果您的问题尽可能具体(即提供 minimal reproducible example 显示输入和预期输出),将会有所帮助.

标签: r time-series xts dummy-variable


【解决方案1】:

xts 基于zoo,动物园常见问题解答(问题 4)有关于不同数据类型的这一行:

“动物园”对象可以是 (1) 数值向量,(2) 数值矩阵或 (3) 一个因子,但不能同时包含数值向量和因子。

所以只要你的 0 和 1 是 numeric,而不是 factor,你应该没问题。它不是一种非常高效的存储介质,但存储效率可能不是您的瓶颈。

一个例子:

timestamp <- seq.POSIXt(from=as.POSIXct("2016-10-12 09:00"), 
                    to=as.POSIXct("2016-10-13 09:00"), 
                    by="min")
dat <- rnorm(length(timestamp))
foo <- xts(dat,order.by=timestamp)

现在那个指标变量:

#make this example reproducible:
set.seed(123)

dummy2 <- sample(c("event","non-event"), size=length(timestamp),
    replace=TRUE)
foo2 <- xts(dummy2, order.by=timestamp)
merged <- cbind(foo, foo2)

这警告你:

In merge.xts(..., all = all, fill = fill, suffixes = suffixes) :
  NAs introduced by coercion

确实:

summary(merged)
     Index                          ..1                ..2      
 Min.   :2016-10-12 09:00:00   Min.   :-3.38110   Min.   : NA   
 1st Qu.:2016-10-12 15:00:00   1st Qu.:-0.64010   1st Qu.: NA   
 Median :2016-10-12 21:00:00   Median : 0.04047   Median : NA   
 Mean   :2016-10-12 21:00:00   Mean   : 0.03025   Mean   :NaN   
 3rd Qu.:2016-10-13 03:00:00   3rd Qu.: 0.67461   3rd Qu.: NA   
 Max.   :2016-10-13 09:00:00   Max.   : 3.25034   Max.   : NA   
                                                  NA's   :1441  

但如果是数字:

dummy3 <- sample(0:1, size=length(timestamp), replace=TRUE)
foo3 <- xts(dummy3, order.by=timestamp)
merged <- cbind(foo, foo3)

默默返回(没有消息就是好消息)。让我们看看:

summary(merged)

         Index                          ..1                ..2        
 Min.   :2016-10-12 09:00:00   Min.   :-3.38110   Min.   :0.0000  
 1st Qu.:2016-10-12 15:00:00   1st Qu.:-0.64010   1st Qu.:0.0000  
 Median :2016-10-12 21:00:00   Median : 0.04047   Median :0.0000  
 Mean   :2016-10-12 21:00:00   Mean   : 0.03025   Mean   :0.4983  
 3rd Qu.:2016-10-13 03:00:00   3rd Qu.: 0.67461   3rd Qu.:1.0000  
 Max.   :2016-10-13 09:00:00   Max.   : 3.25034   Max.   :1.0000  

由于第 2 列是数字,我们不使用相等进行比较;如果这对您来说不直观,请查看 R Inferno 的圈子之一(注意:PDF)。

summary(merged[merged[,2] > 0.5 ,1] )
summary(merged[merged[,2] < 0.5 ,1] )

可能有一种更优雅的方式来做这件事,但它会让你开始。

如果您打算与xts 一起工作,我推荐xts 的作者的建议:

xts 对象的核心是同一个包中的 zoo 对象 姓名。 ...动物园对象周围的大部分细节同样适用于 xts。因为简单地复述优秀的介绍性动物园是多余的 小插图,建议读者阅读、吸收和重新阅读该文档 以最好地了解此类的力量。

【讨论】:

    猜你喜欢
    • 2019-02-09
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多