2011-11-17 1 views
2

... 분기 내내 스플라인 - (최고) 또는 선형 보간 (OK) 또는 반복 된 값 (미세) 중 하나. 문제는 getFin()viewFin()에 의해 반환 된 데이터 형식을 timeSeries 형식으로 변환하는 방법을 알 수 없다는 것입니다. 여기 내 코드입니다 :quantumod의 viewfin 함수가 반환하는 분기 별 데이터를 월별 시계열로 변환하는 방법은 무엇입니까?

그것은 X 개체처럼 보이는
> x 
2011-09-30 2011-06-30 2011-03-31 2010-12-31 2010-09-30 
    3816000 3815000 3813000 3778000 3484000 
> str(x) 
Named num [1:5] 3816000 3815000 3813000 3778000 3484000 
- attr(*, "names")= chr [1:5] "2011-09-30" "2011-06-30" "2011-03-31" "2010-12-31" ... 

는 이상한 역 형식으로되어 있습니다 :

getFin('F') 
x <- viewFin(F.f, "BS", period="Q")["Total Common Shares Outstanding",]*1000 

내 원하는 출력 그러나

> x 
GMT  x.ts 
2011-09-01 3816000 
2011-08-01 3816000 
2011-07-01 3816000 
2011-06-01 3815000 
2011-05-01 3815000 
2011-04-01 3815000 
2011-03-01 3813000 
2011-02-01 3813000 
2011-01-01 3813000 
2010-12-01 3778000 
2010-11-01 3778000 
2010-10-01 3778000 
2010-09-01 3484000 

이며, 여기에 몇 가지 실제 출력 여기서 키는 숫자 값이고 값은 날짜의 문자열입니다. 날짜 또는 숫자 구성 요소를 추출 할 때 숫자 부분을 분리하여 시계열 개체를 생성 할 수 없습니다.

가 이상적으로, 내 원하는 출력에 도착, 나는

mydates <- timeSequence(from = "2011-01-01", to=Sys.Date(), by = "month") 
series <- timeSeries(x$data, mydates) 

을 말할 수있을 것입니다하지만 난 숫자 데이터 부분을 추출 할 수없는 것.

UPDATE herehere에서

, 나는 다음과 같은 코드를 적용 :

getFin('F') 
x <- viewFin(F.f, "BS", period="Q")["Total Common Shares Outstanding",]*1000 
zoox = zoo(x, order.by=as.Date(names(x))) 
x2 <- na.spline(merge(zoox, foo=zoo(NA, order.by=seq(start(zoox), end(zoox), "month")))[, 1]) 

하지만, 내 출력이 날짜 조금 미치게을 보간 망쳐 놨 :

>x2 
2010-09-30 2010-10-30 2010-11-30 2010-12-30 2010-12-31 2011-01-30 2011-03-02 
    3484000 3623591 3720509 3776671 3778000 3804738 3813071 
2011-03-30 2011-03-31 2011-04-30 2011-05-30 2011-06-30 2011-07-30 2011-08-30 
    3813025 3813000 3813100 3814116 3815000 3814976 3814884 
2011-09-30 
    3816000 

보시다시피, 저는 bo 12 월 31 일, 12 월 31 일, 3 월 2011 년 3 가지 값은 있지만 2 월 등은 없습니다. 어떻게 해결할 수 있습니까?

+2

Welcome to Stackoverflow, 질문에 추가하는 대신 답변을 답변으로 게시 할 수 있습니까? 이것은이 질문에 대한 미래의 방문자를 도울 것입니다. – Stedy

답변

0

업데이트 2는 :

더 나은 대답을 게시하시기 바랍니다! 이건 정말 추한이지만, 여기에 내가 허용 뭔가있어 방법은 다음과 같습니다

getFin('F') 
x <- viewFin(F.f, "BS", period="Q")["Total Common Shares Outstanding",]*1000 
zoox = zoo(x, order.by=as.Date(names(x))) 
foo=zoo(NA, order.by=seq(as.Date(as.character(timeFirstDayInMonth(start(zoox)))), as.Date(as.character(timeFirstDayInMonth(end(zoox)))), "month")) 
foo2 <- na.approx(merge(zoox, foo)[, 1]) 
fx <- merge(foo2,foo, all=FALSE)[,1] 

나는 사실이 너무 추하다는 점을 발견

> x 
2011-09-30 2011-06-30 2011-03-31 2010-12-31 2010-09-30 
    3816000 3815000 3813000 3778000 3484000 

> fx 
2010-10-01 2010-11-01 2010-12-01 2011-01-01 2011-02-01 2011-03-01 2011-04-01 
    3487196 3586261 3682130 3778389 3790444 3801333 3813022 
2011-05-01 2011-06-01 2011-07-01 2011-08-01 2011-09-01 
    3813681 3814363 3815011 3815348 3815685 

로 변환, 그래서 나는이 게시 대답하지만 다른 누군가가 핸섬 사람을 올리길 원합니다.

1

나는이 똑같은 문제를 겪었습니다. 나는 그것을 실현하기 위해 두 가지 기능을 썼습니다.

첫 번째로, 아마도 월말 종료일을 원하지만 R은 첫 번째 날짜를 훨씬 간단하게 처리하기 때문에 날짜 기능을 사용하여 날짜를 이동하려고합니다.

날짜 기능
toLastDay <- function(dateObj, monAdv=0, ToFirst = FALSE) 
# takes date object, transforms and returns a dat object 
{ 
    tt <- as.POSIXlt(dateObj) 
    tt$mon <- tt$mon + monAdv # moves the month 
    tt$mday <- 1L    # make date the first 
    if(ToFirst) {    
     tt <- as.Date(tt) 
    } else { 
     tt$mon <- tt$mon + 1L # go to the first of the next month 
     tt <- as.Date(tt) - 1L # subtract one day, yielding the last of prior month 
    } 
    return(tt) 
} 

이제 데이터를 가지고 선형 보정시를 수행하는 기능을합니다 - 내가 zooxts에 na.approx 기능을 사용합니다. 여기서 qtr 중반 날짜를 원할 것입니다. 대부분의 qtrly 데이터는 제 경험에서 qtr 중반으로 가장 잘 생각됩니다.

# make Qtrly monthly -- with obsv in the mid qtr 
qtr2Mon <- function(QD) 
{ 
    fromD <- toLastDay(index(first(QD)), -2L, ToFirst = TRUE) 
    toD <- toLastDay(index(last(QD)), ToFirst = TRUE) 
    q2m_dates <- toLastDay(seq(fromD, toD, by = 'mon')) 
    emptyX <- xts(, q2m_dates) 
    QD_adj <- QD 
    index(QD_adj) <- toLastDay(index(QD), monAdv = -1L) 
    mm <- merge(emptyX, QD_adj) 
    mm_filled <- na.approx(mm) 
    return(mm_filled) 
} 

먼저 우리는 qtrly xts 개체를 만들 - qtrly GDP 또는 일부 등

으로 생각
Sys.setenv(TZ = 'GMT') 
require(xts) 

qdates <- seq(as.Date("2000-03-01"), as.Date("2013-06-01"), by = "3 mon") 
qdates <- toLastDay(qdates) 
qdata <- rnorm(length(qdates), mean = 1) 
qtr_XTS <- xts(qdata, order.by = qdates) 

이제 우리는 선형 성장 등을 가정하고, 매월로 변환하려면 위의 라이브러리 기능을 사용할 수 있습니다

mon_fromQtr <- qtr2Mon(qtr_XTS) 

완료!

관련 문제