2016-11-27 9 views
0

Я работаю над преобразованием некоторых данных в ежеквартальное время. xts объект серии. Сначала мои данные не были подходящим временным объектом, а теперь as.yearqtr ведет себя, я не могу понять.Создание квартального объекта `xts` временного ряда для использования с plot.xts

Я хочу, чтобы объект df был преобразован так, чтобы я мог его построить с plot.xts, моей конечной целью, но я застрял, как показано ниже.

df <- structure(list(yrQ = structure(1:7, .Label = c("2016-1", "2016-2", 
"2016-3", "2016-4", "2016-5", "2016-6", "2016-7"), class = "factor"), 
    a = c(4.14, 2.83, 3.71, 4.15, 4.63, 4.91, 5.31), b = c(4.25, 
    3.5, 3.5, 3.5, 3.5, 3.5, 5)), .Names = c("yrQ", "a", "b" 
), row.names = c(NA, 7L), class = "data.frame") 
df 
#  yrQ a b 
# 1 2016-1 4.14 4.25 
# 2 2016-2 2.83 3.21 
# 3 2016-3 3.71 3.21 
# 4 2016-4 4.15 3.21 
# 5 2016-5 4.63 3.21 
# 6 2016-6 4.91 3.21 
# 7 2016-7 5.31 5.00 

# install.packages(c("xts"), dependencies = TRUE) 
library(xts) 
xts(df, order.by = df[,1]) 
# Error in xts(df, order.by = df[, 1]) : 
# order.by requires an appropriate time-based object 

df$yrQ <- as.yearqtr(df$yrQ) 
df  
#  yrQ a b 
# 1 2016 Q1 4.14 4.25 
# 2 2016 Q2 2.83 3.21 
# 3 2016 Q3 3.71 3.21 
# 4 2016 Q4 4.15 3.21 
# 5 NA QNA 4.63 3.21 
# 6 NA QNA 4.91 3.21 
# 7 NA QNA 5.31 5.00 
+1

Колонка 'yrQ' явно не обозначают кварталы, потому что нет 7 кварталов в 2016 году Является ли исходные данные ежемесячно? Как вы хотите объединить его в квартал (сумма, средняя, ​​OHLC ...)? –

+0

@ChrisHaug, мне очень жаль. Я делал это после того, как я должен был лечь спать (@ R.S. тоже вежливо отождествляет это умственное отставание). Я обновлю свой вопрос как можно скорее. Благодаря! –

ответ

1

Данные, которые вы имеете в ФР, как представляется, месячные данные, как она проходит путь мимо 4.

В этом случае, я думаю, путь будет использовать as.yearmon и оттуда to.quarterly. На самом деле это не так хорошо, без диаграммы OHLC, поэтому я также посмотрел на другой вариант. Посмотрите, что вы думаете об этом.

Вот моя попытка:

require(xts) 
df <- structure(list(yrQ = structure(1:7, .Label = c("2016-1", "2016-2", 
"2016-3", "2016-4", "2016-5", "2016-6", "2016-7"), class = "factor"), 
    a = c(4.14, 2.83, 3.71, 4.15, 4.63, 4.91, 5.31), b = c(4.25, 
    3.5, 3.5, 3.5, 3.5, 3.5, 5)), .Names = c("yrQ", "a", "b" 
), row.names = c(NA, 7L), class = "data.frame") 
df 


# using yearmon to create xts 
myxts<- xts(df[,-1], order.by = as.yearmon(as.character(df[,1]) )) 

myxts 

#using to.quarterly .. cannot be used simultaneously with both columns 
#guess that would need apply and Reduce 

myxtsQ<- to.quarterly(myxts$a) 
myxtsQ 
plot(myxtsQ) 
# require(quantmod) 
# quantmod::chartSeries(myxtsQ) 



# One option seems to be indexing 
# though it seems XTS does not support recycling of boolean indices 
#so we need to create a list of indices 

indx<- rep(c(T,F,F), ceiling(nrow(myxts)/3)) 
indx 
myxtsQ<- myxts[indx,] 
plot.xts(myxtsQ) 
+0

Спасибо за отличный ответ! Я думаю, что вчера вечером не спал. Поскольку вы и @ChrisHaug указали, что 'yrQ', очевидно, не обозначает кварталы, а месяцы. Ваш ответ был, несмотря на мой психический разрыв, очень ясным и хорошо написанным. Благодаря! –

+0

Рад, что это помогло. Мне лично понравилась эта диаграмма стиля CBM с квантовым моментом для этой цели, кстати. –

Смежные вопросы