2016-11-21 1 views
1

누락 날짜에 이전 값을 추가하여 분기 별 데이터를 일별 데이터로 변환하려고합니다. 이 데이터는 다른 주식의 재무 비율로 구성됩니다. 내 데이터에는 시세와 날짜의 두 열로 구성된 행 레이블이 있습니다. 각 주식에 대해 반복되는 날짜가 있기 때문에 나는 종가를 무시하고 누락 된 날짜를 이전 값으로 다시 채우는 방법을 모르겠습니다.R에 이전 값이 누락 된 날짜 추가 - 분기 별 일일 데이터로 변환

> df_new 
        de eps  pe ps pb 
APD 2015-09-30 1.373 1.6 21.463 2.772 3.784 
APD 2015-12-31 1.325 1.68 21.284 2.893 3.805 
APD 2016-03-31 1.411 -2.19 56.114 3.254 4.491 
SWKS 2003-03-31 0.402 -0.04 <NA> <NA> <NA> 
SWKS 2003-06-30 0.397 -0.04 -2.289 1.518 0.929 
SWKS 2003-09-30 0.62 -0.29 -2.799 2.046 1.877 
SWKS 2003-12-31 0.643 0.03 -25.426 2.045 1.905 
SWKS 2004-03-31 0.657 -0.06 -32.004 2.641 2.579 
SWKS 2004-06-30 0.584 0.09 -37.18 1.825 1.782 
SWKS 2004-09-30 0.555 0.1 65.806 1.881 1.962 
SWKS 2004-12-31 0.525 0.09 45.823 1.777 1.912 

그리고 (매주 경우)은 다음과 같이 할 : 여기

는 데이터의 작은 샘플 지금까지 모습입니다

> df_new 
        de eps  pe ps pb 
APD 2015-09-30 1.373 1.6 21.463 2.772 3.784 
APD 2015-10-01 1.373 1.6 21.463 2.772 3.784 
APD 2015-10-02 1.373 1.6 21.463 2.772 3.784 
APD 2015-10-03 1.373 1.6 21.463 2.772 3.784 
... 
APD 2015-12-31 1.325 1.68 21.284 2.893 3.805 
APD 2016-01-01 1.325 1.68 21.284 2.893 3.805 
APD 2016-01-02 1.325 1.68 21.284 2.893 3.805 
APD 2016-01-03 1.325 1.68 21.284 2.893 3.805 
... 
APD 2016-03-31 1.411 -2.19 56.114 3.254 4.491 
APD 2016-04-01 1.411 -2.19 56.114 3.254 4.491 
APD 2016-04-02 1.411 -2.19 56.114 3.254 4.491 
APD 2016-04-03 1.411 -2.19 56.114 3.254 4.491 
... 
SWKS 2003-03-31 0.402 -0.04 <NA> <NA> <NA> 
SWKS 2003-04-01 0.402 -0.04 <NA> <NA> <NA> 
SWKS 2003-04-02 0.402 -0.04 <NA> <NA> <NA> 
SWKS 2003-04-03 0.402 -0.04 <NA> <NA> <NA> 
... 
SWKS 2003-06-30 0.397 -0.04 -2.289 1.518 0.929 
and so on... 

내가 답변 검색이 링크 : Add missing xts/zoo data with linear interpolation in R은 내가 원하는 것에 다소 가깝습니다. 나는 시세 기호로 무엇을 할 지 모르겠지만.

도움을 주셔서 감사합니다.

답변

2

by을 사용하면 각 기호의 행에 표시된 익명의 기능을 적용 할 수 있습니다. 이 함수는 날짜의 격자 g을 생성하고 na.locf을 적용하는 데이터 프레임의 원래 행과 병합하여 NA 값을 채 웁니다. 마지막으로 do.call("rbind", ...)을 사용하여 다시 생성 된 "by" 개체를 넣습니다.

library(zoo) # na.locf 

df <- do.call("rbind", by(df_new, df_new$symbol, function(x) { 
    rng <- range(x$date, na.rm = TRUE) 
    g <- data.frame(date = seq(rng[1], rng[2], "day")) 
    na.locf(merge(x, g, all = TRUE)) 
})) 

참고 : 입력 df_new 재현 형태이다 : 당신의 빠른 응답 G. 그로 텐 디크에 대한

Lines <- " 
APD 2015-09-30 1.373 1.6 21.463 2.772 3.784 
APD 2015-12-31 1.325 1.68 21.284 2.893 3.805 
APD 2016-03-31 1.411 -2.19 56.114 3.254 4.491 
SWKS 2003-03-31 0.402 -0.04 <NA> <NA> <NA> 
SWKS 2003-06-30 0.397 -0.04 -2.289 1.518 0.929 
SWKS 2003-09-30 0.62 -0.29 -2.799 2.046 1.877 
SWKS 2003-12-31 0.643 0.03 -25.426 2.045 1.905 
SWKS 2004-03-31 0.657 -0.06 -32.004 2.641 2.579 
SWKS 2004-06-30 0.584 0.09 -37.18 1.825 1.782 
SWKS 2004-09-30 0.555 0.1 65.806 1.881 1.962 
SWKS 2004-12-31 0.525 0.09 45.823 1.777 1.912" 
df_new <- read.table(text = Lines, 
    col.names = c("symbol", "date", "de", "eps", "pe", "ps", "pb")) 
df_new$date <- as.Date(df_new$date) 
+0

고마워요! 나는 당신이하고있는 것과 동일한 일을하는 방법을 궁금해했다. 그러나 내 데이터 프레임이 이미 저장되고 있기 때문에 행 이름 (레이블)이 표식과 심볼이된다. (예 : rowname [1,1]은 APD 2015-09 -30). 다양한 데이터베이스를 하나의 데이터베이스로 통합하려고하지만 각각의 데이터베이스마다 다른 주기성을 갖기 때문에 기존의 데이터베이스 각각에 의해 식별되는 레이블로 행 이름을 사용하고 있습니다. – marya

+0

@marya 당신은'rownames (df) <- paste (df $ symbol, df $ date)'를 원하지만'[1, 1]'의 rownames 인덱스 연산과 같은 것이 없다 ... – FXQuantTrader

+0

고마워. 귀하의 코멘트 FXQuantTrader! 나는 첫 줄에 rowname의 예를 들어 주려고했지만 어떻게 든 그것을 썼다.하지만 너는 옳다! 그런 건 내 나쁜 짓이야! (이 포럼에서 처음으로 :) ..) 내 데이터베이스는 이미 rownames와 붙여 넣기 기능을 사용하여 기호와 날짜가되는 방식으로 통합되어 있습니다. 실제로 G. Grothendieck이 위에 썼으나 rownames를 좋아하는 것으로 간주하는 방법을 묻습니다. 이. 나는 분리 된() 함수를 사용하여 위에있는 함수를 사용하거나 paste() 전에이 함수를 전달할 수 있다고 생각한다. 다시 한 번 감사드립니다! 정말 도움을 주셔서 감사합니다! – marya