2017-12-02 7 views
0

에 영향을 미치는 요인에 의한 시계열 나는 다음과 같은 시계열 있습니다곱하기에게 R

cf <- cbind(data.frame(date=as.Date(c("2017/11/28", "2017/11/25","2017/11/04","2017/09/25"))),cumfactor=c(0.8,0.7,0.6,.05)) 
:

ts <- cbind(data.frame(date=seq(as.Date("2017/11/01"), by = "day", length.out = 30)),value=rep(5,30)) 
ts <- ts[order(ts$date, decreasing=T),] 

내가 어떤 주어진 날짜의 값을 갖는 누적 요소 아래하여 조정하고 싶습니다를

ts의 각 날짜 값은 해당 날짜의 cf에 대한 cumfactor에 의해 곱해진다 (조정 됨). 그 cumfactor는 다음 cumfactor가 이전 날짜에 나타날 때까지 다음 (이전) 날짜에 사용됩니다. ts의 첫 번째 (최신) 날짜는 첫 번째 (최신) cumfactor 날짜보다 늦은 경우 조정하면 안됩니다.

나는 다음과 같은 결과를 찾고 있어요 :

result <- cbind(data.frame(date=seq(as.Date("2017/11/01"), by = "day", length.out = 30)),value=c(3,3,3,3,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,4,4,4,5,5)) 
result <- result[order(result$date, decreasing=T),] 

내 생각 엔 루프를위한 최고의 옵션이 될 수 있지만이 결과를 얻기에 성공하지 않은 것입니다.

답변

1

병합 ts와 cf는 인수를 전달하고 곱합니다.

library(zoo) 

m <- merge(ts, cf, all.x = TRUE)[nrow(ts):1, ] 
transform(m, value = value * na.fill(na.locf0(cumfactor), 1)) 

우리는 질문에서 내림차순 날짜를 유지했지만 R에서는 보통 시계열이 날짜의 오름차순으로 표시됩니다.

+0

고맙습니다. Grothendieck, na.locf0이 동물원 패키지의 일부인지 알고 계십니까? 방금 동물원 패키지를 설치했는데 그 기능을 인식하지 못하는 것 같습니다. – rwn1v

+0

예. CRAN-1.8.0에 최신 버전의 동물원이 있는지 확인하십시오. 'packageVersion ("zoo")' –