2016-07-12 1 views
1

Для годовых данных (например, годовых отчетов о доходах), я хотел бы сохранить формат xts, но мне нужно преобразовать индекс таблицы в «только год». Есть классы yearmon и yearqtr, но я не нашел «год» только для работы с xts.Как преобразовать индекс или время года xts

# IS is annual reports of incomes. time(IS) is POSIXct. 
library(quantmod) 
IS <- viewFin(get(getFin("IBM")), "IS", "A") # Download data 
IS <- as.xts(t(IS)) # Convert to xts 
time(IS) <- as.yearqtr(time(IS)) ## works to have quarterly index 
time(IS) <- as.yearmon(time(IS)) ## works to have monthly index 
time(IS) <- ????(time(IS)) ## To have yearly index with xts class 

Какое оптимальное решение? Спасибо.

+0

Пожалуйста, покажите небольшой воспроизводимый пример? Возможно, '' format (IS, "% Y") ' – akrun

+0

Я редактировал вопрос, чтобы иметь воспроизводимый пример. Ваше решение не работает, поскольку xts не принимает символьный или числовой класс для индекса. > время (IS) <- формат (время (IS), "% Y") Ошибка в 'time <-. Xts' (' * tmp * ', value = c (" 2012 "," 2013 "," 2014 "," 2015 ": Неподдерживаемый индексный индекс индекса типа 'character' –

ответ

0

Было бы полезно, если бы вы объяснили, почему вам нужен индекс только как «год». Xts имеет команду indexFormat, которая позволяет вам управлять отображением дат, и, хотя я никогда не использовал ее, я предполагаю, что она позволит вам отображать только год любой введенной записи индекса.

Более экстремальным решением было бы преобразование каждой даты в первый год года в этом году. Вот код, который поможет сделать это:

first.of.year <- function(x)   # Given a date, returns the first day of that year 
    return(as.Date(paste(year(as.Date(x)),"-01-01", sep=""))) 

index(x) <- first.of.year(index(x)) 
Смежные вопросы