объект зоопарка просто вставил случайные строки, когда я попробовал cbind. Что случилось? - PullRequest
2 голосов
/ 13 марта 2019

Я не уверен, что случилось с моим объектом зоопарка. Я попытался привязать другой столбец к моему объекту в зоопарке, и внезапно мой индекс взорвался. Вот что я попробовал:

dates.zoo <- zoo(data.frame(val=seq(1:121)), order.by = seq.Date(as.Date('2018-12-01'), as.Date('2019-03-31'), "days"))
cbind(dates.zoo, ti=as.character(1:nrow(dates.zoo)))
           val  ti  
1970-01-02 <NA> 1   
1970-01-03 <NA> 2   
1970-01-04 <NA> 3   
1970-01-05 <NA> 4   
...

Откуда взялся 1970? Это никогда не было в оригинальном объекте зоопарка (прежде, чем я связал новый столбец)

1 Ответ

4 голосов
/ 13 марта 2019

Намного легче увидеть, уменьшим ли мы пример. Приведенный ниже код приводит второй аргумент к объекту класса zoo, давая zoo(as.character(11:13), 1:3), а затем он приводит класс индекса второго аргумента (integer) к тому же классу индекса, что и первый аргумент (Date) , Предупреждающее сообщение предупреждает, что используются разные классы индекса.

cbind.zoo имеет специальную обработку для обработки простых векторов, но только если они имеют тот же тип, что и основные данные объекта зоопарка. Если бы в качестве базовых данных первого аргумента использовался простой вектор того же типа , то есть оба numeric, он бы работал как хотелось бы. Закомментированная строка с пометкой correct показывает это.

library(zoo)
dates.zoo <- zoo(data.frame(val= 1:3), as.Date('2019-01-03') + 0:2)
# cbind(dates.zoo, ti=11:13) # correct
cbind(dates.zoo, ti=as.character(11:13)) # incorrect

, что дает:

           val  ti  
1970-01-02 <NA> 11  
1970-01-03 <NA> 12  
1970-01-04 <NA> 13  
2019-01-03 1    <NA>
2019-01-04 2    <NA>
2019-01-05 3    <NA>
Warning message:
In merge.zoo(..., all = all, fill = fill, suffixes = suffixes, retclass = "zoo",  :
  Index vectors are of different classes: Date integer

Также обратите внимание:

as.Date(1:3)
## [1] "1970-01-02" "1970-01-03" "1970-01-04"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...