Я пытаюсь найти способ поиска значения в другом объекте зоопарка. Предположим, у меня есть следующие временные ряды:
a <- read.zoo(data.frame(date=as.Date('2011-12-31') + 0:8, reldt=c(rep(as.Date("2012-02-01"),3), rep(as.Date("2012-03-01"),3), rep(as.Date("2012-01-01"),3)), col2=seq(11,19)), FUN = as.Date)
a
reldt col2
2011-12-31 2012-02-01 11
2012-01-01 2012-02-01 12
2012-01-02 2012-02-01 13
2012-01-03 2012-03-01 14
2012-01-04 2012-03-01 15
2012-01-05 2012-03-01 16
2012-01-06 2012-01-01 17
2012-01-07 2012-01-01 18
2012-01-08 2012-01-01 19
mon <- read.zoo(data.frame(date=c(as.Date('2012-01-01'), as.Date('2012-02-01'), as.Date('2012-03-01')), mc=letters[1:3], mc2=c(100,200,300)LETTERS[1:3]), FUN = as.Date)
mon
mc mc2
2012-01-01 a 100
2012-02-01 b 200
2012-03-01 c 300
Для каждого reldt
в a
я бы хотел посмотреть значение в столбце mon.mc2
. Другими словами, я хотел бы добавить соответствующие значения в столбце mon.mc2
к a
, чтобы у меня был столбец a.mc2
, который соответствует a.reldt=index(mon)
Вот что я попробовал (как я знаю, это работает для data.frame, но, похоже, не работает для объектов зоопарка). ЭТО НЕ ПРАВИЛЬНО ВЫРАВНИВАЕТСЯ ДЛЯ НЕКОТОРЫХ ПРИЧИН (Я подозреваю, что объекты зоопарка не соблюдают порядок индексов, возвращаемый match(...)
):
a$mc2 <- as.numeric(coredata(mon[match(as.Date(coredata(a$reldt)), as.Date(index(mon)))]$mc2))
Вот объект зоопарка, который я хотел бы вывести:
reldt col2 mc2
2011-12-31 2012-02-01 11 200
2012-01-01 2012-02-01 12 200
2012-01-02 2012-02-01 13 200
2012-01-03 2012-03-01 14 300
2012-01-04 2012-03-01 15 300
2012-01-05 2012-03-01 16 300
2012-01-06 2012-01-01 17 100
2012-01-07 2012-01-01 18 100
2012-01-08 2012-01-01 19 100
ПРИМЕЧАНИЕ. Я бы предпочел решение Base R с использованием zoo, но это было бы
интересно посмотреть другие пакеты, которые могут быть полезны