簡體   English   中英

將時間序列乘以R中的一個因子

[英]Multiply a timeseries by a factor in R

我有以下時間序列:

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),]

我想通過以下在某些給定日期具有值的累積因子進行調整:

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上每個日期的值將乘以(調整)相應日期上cf的累積因子,並且該累積因子將用於后續(較早)日期,直到下一個累積因子顯示較早的日期為止。 如果ts中的第一個(最新)日期晚於第一個(最新)cumcum日期,則不應對其進行調整。

我正在尋找以下結果:

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),]

我的猜測是for循環可能是最好的選擇,但我並未成功獲得此結果。

將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中,時間序列通常以日期的升序表示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM