Добавление столбца к объекту xts на основе другого объекта xts в R

У меня есть один основной объект XTS «Данные» с строками ~ 1M, охватывающими 22 дня. У меня есть еще один объект XTS «Набор» с 22 строками, с 1 записью в день. Я хотел бы объединить этот меньший объект XTS с большим, чтобы у него был дополнительный столбец, содержащий значение в наборе для этого дня.

Сначала я попробовал:

> Data=cbind(Data,as.numeric(Set[as.Date(index(Data[]))]))
Error in error(x, ...) : 
improper length of one or more arguments to merge.xts

Затем я попробовал:

> Data=cbind(Data,1)
> Data[,6]=as.numeric(Set[as.Date(index(Data[,6]))])
Error in NextMethod(.Generic) : 
  number of items to replace is not a multiple of replacement length

Я также пробовал без as.numeric, но получил ту же ошибку. Я попытался превратить Data в data.frame и получил ошибку:

Error in `[<-.data.frame`(`*tmp*`, , 6, value = c(1, 397.16, 397.115,  : 
  replacement has 22 rows, data has 835771

Что я делаю не так и как мне это сделать? Я использую R только последние две недели.

Спасибо!

> str(Data)
An ‘xts’ object from 2012-01-03 05:01:05 to 2012-01-31 14:59:59 containing:
  Data: num [1:835771, 1:5] 397 397 397 397 397 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:5] "SYN" "\"WhitePack.BID_SIZE\"" "\"WhitePack.BID_PRICE\"" "\"WhitePack.ASK_PRICE\"" ...
  Indexed by objects of class: [POSIXct,POSIXt] TZ: 
  xts Attributes:  
 NULL
> str(Set)
An ‘xts’ object from 2012-01-02 to 2012-01-31 containing:
  Data: chr [1:22, 1] "  1.000" "397.160" "397.115" "397.175" "397.200" "397.390" "397.560" "397.580" "397.715" ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr "Settle"
  Indexed by objects of class: [POSIXct,POSIXt] TZ: 
  xts Attributes:  
 NULL

r xts
person user1266555    schedule 13.03.2012    source источник


Ответы (1)


Добьетесь ли вы успеха с:

df3 <- merge(Data, Set)

Чтобы устранить мое отсутствие полного понимания исходной проблемы, я думаю, что единственным дополнительным шагом будет:

df3[, 6]  <- na.locf( df3[, 6] )
person IRTFM    schedule 13.03.2012
comment
Нет, это добавляет 22 строки к данным с NA в каждой новой ячейке данных, кроме этих 22. - person user1266555; 13.03.2012
comment
Вам нужно опубликовать результаты str(Data) и str(Set). Я предполагаю, что ваши индексные форматы не такие, как вы думаете. - person IRTFM; 13.03.2012
comment
Вам не нужны вызовы coredata. И если 22 значения индекса в Set немного отличаются от значений в Data, вы можете удалить их через: df3 <- df3[index(Data),]. - person Joshua Ulrich; 13.03.2012
comment
После пары неверных шагов я думаю, что приведенное выше дополнение должно быть выполнено. Возможно, вам не придется удалять лишние 22 строки, в которых было вставлено неявное время полуночи. - person IRTFM; 13.03.2012
comment
› df3$Settle=na.locf(df$Settle) Ошибка в df[, 6]: объект типа «замыкание» не является подмножеством › df4=as.data.frame(df3) › df4$settle=na.locf( df4$settle) › df3=as.xts(df4) Это сработало. Спасибо! - person user1266555; 13.03.2012
comment
Он работал без предварительного перехода к фрейму данных, должно быть, была опечатка. Еще раз спасибо. - person user1266555; 13.03.2012
comment
Назвать это опечаткой — значит проявить милосердие. Я просто не знал, как правильно это сделать при первом проходе. Теперь я знаю, что есть метод [<-.zoo, который правильно работает со столбцами coredata. - person IRTFM; 13.03.2012