2015-01-12 3 views
2

Привет У меня есть некоторые данные, агрегированные на уровне четверти и есть столбец содержит данные, как это:R четверть изменение временной метки

> unique(data$fiscalyearquarter) 
[1] "2012Q3" "2010Q3" "2012Q1" "2011Q4" "2012Q4" "2008Q1" "2008Q2" "2010Q4" "2010Q1" 
[10] "2009Q2" "2012Q2" "2011Q3" "2013Q2" "2013Q1" "2011Q2" "2013Q4" "2009Q4" "2009Q3" 
[19] "2011Q1" "2010Q2" "2013Q3" "2008Q4" "2009Q1" "2014Q1" "2008Q3" "2014Q2" 

Я думал о написании функции, превратить строку в метку времени.

Что-то вроде этого, разделите строку на год и квартал, а затем заставьте квартал преобразовать в месяц (середина четверти).

convert <- function(myinput = "2008Q2"){ 
    year <- substr(myinput, 1, 4) 
    quarter <- substr(myinput, 6, 6) 
    month <- 3 * as.numeric(quarter) - 1 
    date <- as.Date(paste0(year, sprintf("%02d", month), '01'), '%Y%m%d') 
    return(date) 
} 

Мне нужно преобразовать эти строки в формат даты, а затем проанализировать их оттуда.

> convert("2010Q3")  
[1] "2010-08-01" 

Есть ли какой-либо выход за пределы моего жесткого кодирования для анализа проблемы временных рядов на ежеквартальном уровне?

+0

Важно ли, чтобы дата была вторым месяцем в квартале вместо первого? – GSee

+1

@GSee, вы можете изменить свое решение на что-то вроде 'temp <- as.POSIXlt (as.yearqtr (x)); temp $ mon <- temp $ mon + 1; as.Date (temp) ' –

+0

@DavidArenburg да, мы могли бы добавить месяц, но это плохая идея, чтобы модифицировать объекты POSIXlt вроде этого – GSee

ответ

4

Если x ваш вектор, и вы все в порядке, имеющие дату быть первый день квартала:

library(zoo) 
as.Date(as.yearqtr(x)) 

Если вы хотите дату быть первый день второго месяца квартала, как ваш пример, вы могли бы взломать что-то вроде этого:

as.Date(format(as.Date(as.yearqtr(x))+40, "%Y-%m-01")) 
+0

Йо также может добавить что-то вроде 'library (lubridate); temp <- as.POSIXct (as.yearqtr (x)); as.Date (temp + months (1)) 'Я думаю –

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