R: добавление столбца фиктивной переменной в объект xts timeseries

У меня есть объект временного ряда xts, составленный из ежеминутных данных внутридневной торговли за 2015 год. Я хотел бы добавить фиктивную переменную, обозначающую 1 как день события или 0 как день без событий.

Поскольку фиктивная переменная по своей природе не является временным рядом, могу ли я добавить это к своим торговым данным?

Как мне построить фиктивную колонку?

Как это можно добавить к существующим хтс?

Новичок в R, поэтому, пожалуйста, будьте как можно точнее в своем ответе. Спасибо!

1 ответ

xts основывается на zooи в FAQ по зоопарку (вопрос 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 числовой, мы не сравниваем с использованием равенства; если это не интуитивно для вас, проверьте Circle One of R Inferno (осторожно: PDF).

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

Возможно, есть более элегантный способ сделать это, но это поможет вам начать.

Если вы планируете работать с xts более чем тривиально, я рекомендую совет от авторов xts:

В основе объекта xts лежит объект zoo из одноименного пакета.... Большинство деталей, окружающих объекты зоопарка, в равной степени относятся к xts. Поскольку было бы излишним просто пересказать превосходную вводную виньетку в зоопарке, читателю рекомендуется прочитать, усвоить и перечитать эту документацию, чтобы лучше понять всю мощь этого класса.

Другие вопросы по тегам