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. Поскольку было бы излишним просто пересказать превосходную вводную виньетку в зоопарке, читателю рекомендуется прочитать, усвоить и перечитать эту документацию, чтобы лучше понять всю мощь этого класса.