Я объединяю 2 временных ряда зоопарка с разной частотой.
Один с ежемесячными данными, а другой с квартальными данными.
library(Quandl)
myDataFormat <- "zoo"
pmi <- Quandl("FRED/NAPM", type = myDataFormat)
gdp <- Quandl("FRED/A191RO1Q156NBEA", type = myDataFormat)
pp <- aggregate(pmi, as.yearmon)
gg <- aggregate(gdp, as.yearmon)
mrg <- merge(pp,gg)
mrg.tail <- tail(mrg,20)
Mrg.tail теперь содержит
pp gg
sep 2014 55.8 NA
okt 2014 57.3 2.5
nov 2014 57.5 NA
dec 2014 54.9 NA
jan 2015 53.9 2.9
feb 2015 53.3 NA
mrt 2015 52.3 NA
apr 2015 51.6 2.7
mei 2015 53.1 NA
jun 2015 53.1 NA
jul 2015 51.9 2.1
aug 2015 51.0 NA
sep 2015 50.0 NA
okt 2015 49.4 2.0
nov 2015 48.4 NA
dec 2015 48.0 NA
jan 2016 48.2 2.0
feb 2016 49.5 NA
mrt 2016 51.8 NA
apr 2016 50.8 NA
Ищу способ задержать столбец gg на 1 месяц.
Итак, результат должен выглядеть так
pp gg gg_new
sep 2014 55.8 NA 2.5
okt 2014 57.3 2.5 NA
nov 2014 57.5 NA NA
dec 2014 54.9 NA 2.9
jan 2015 53.9 2.9 NA
feb 2015 53.3 NA NA
mrt 2015 52.3 NA 2.7
apr 2015 51.6 2.7 NA
mei 2015 53.1 NA NA
jun 2015 53.1 NA 2.1
jul 2015 51.9 2.1 NA
aug 2015 51.0 NA NA
sep 2015 50.0 NA 2.0
okt 2015 49.4 2.0 NA
nov 2015 48.4 NA NA
dec 2015 48.0 NA 2.0
jan 2016 48.2 2.0 NA
feb 2016 49.5 NA NA
mrt 2016 51.8 NA NA
apr 2016 50.8 NA NA
Значения gg_new сдвинуты на 1 месяц вверх.
Кто-нибудь знает, как это сделать?
2 ответа
Используйте lag
и объедините его обратно с исходным, сохранив исходные месяцы, но не отставая ни одного месяца за пределами этого диапазона.
> merge(mrg.tail, g1 = lag(mrg.tail$gg), all = c(TRUE, FALSE))
pp gg g1
Sep 2014 55.8 NA 2.5
Oct 2014 57.3 2.5 NA
Nov 2014 57.5 NA NA
Dec 2014 54.9 NA 2.9
Jan 2015 53.9 2.9 NA
Feb 2015 53.3 NA NA
Mar 2015 52.3 NA 2.7
Apr 2015 51.6 2.7 NA
May 2015 53.1 NA NA
Jun 2015 53.1 NA 2.1
Jul 2015 51.9 2.1 NA
Aug 2015 51.0 NA NA
Sep 2015 50.0 NA 2.0
Oct 2015 49.4 2.0 NA
Nov 2015 48.4 NA NA
Dec 2015 48.0 NA 2.0
Jan 2016 48.2 2.0 NA
Feb 2016 49.5 NA NA
Mar 2016 51.8 NA NA
Apr 2016 50.8 NA NA
Для немного другого результата посмотрите на lag(mrg.tail, 0:1)
.
Для этого можно использовать цикл for:
for(i in 1:(nrow(mrg.tail)-1){ # Loop through all but last row
mrg.tail$gg_new[i] = mrg.tail$gg[i+1]
}
mrg.tail$gg_new[nrow(mrg.tail)] = NA # This is to take care of the last row
Похожие вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат полностью. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.