![](/img/trans.png)
[英]For a column in R dataframe, even if one value is not NA, then replace all NA's with that value?
[英]Replace NA's in R with the current rollapply value
我有一個來自特斯拉回報的 10 年數據集(2 天差異百分比)
tsla <- quantmod::getSymbols("TSLA", from = base::as.Date("2011-01-01"), to = base::as.Date("2022-01-31"), auto.assign = F)
tsla = as_tibble(tsla)
head(tsla)
我還有一個感興趣的 function:
alpha = 0.01
garnor = function(x){
require(fGarch)
t = length(x)
fit = garchFit(~garch(1,1),data=x,trace=F,cond.dist="norm")
m = fit@fitted
cv = fit@sigma.t
var = m+cv*qnorm(1-alpha)
return(var[t])
}
現在我想以一種棘手的方式回溯測試 function:回顧期將是前 252 個交易日。然后每個月(即 21 天)我想評估風險。這意味着 21 天風險將保持不變。但是 rollapply function 輸出 NA。我想用以前的值替換 NA,然后 plot y 值(y 列)和后向值(一個圖中的后列)。
d = tsla%>%
dplyr::select(TSLA.Adjusted)%>%
dplyr::mutate(Close = TSLA.Adjusted)%>%
dplyr::mutate(y = as.numeric((Close - dplyr::lag(Close, 2)) / Close))%>%
dplyr::select(Close,y)%>%
tidyr::drop_na()%>%
dplyr::mutate(back = zoo::rollapplyr(y,width = 252,FUN = garnor,by = 21,fill=NA))
例如 output 看起來像這樣:
252 5.54 -0.0307 0.0927
253 5.42 -0.0354 NA
254 5.38 -0.0297 NA
255 5.45 0.00477 NA
256 5.52 0.0257 NA
257 5.65 0.0347 NA
258 5.65 0.0223 NA
259 4.56 -0.239 NA
260 5.32 -0.0620 NA
261 5.36 0.150 NA
262 5.35 0.00598 NA
263 5.32 -0.00789 NA
264 5.35 0.000374 NA
265 5.48 0.0299 NA
266 5.59 0.0429 NA
267 5.79 0.0525 NA
268 5.87 0.0464 NA
269 5.91 0.0213 NA
270 5.81 -0.00894 NA
271 5.92 0.000338 NA
272 6.05 0.0390 NA
273 6.23 0.0504 0.104
274 6.36 0.0487 NA
275 6.32 0.0142 NA
276 6.39 0.00407 NA
277 6.52 0.0301 NA
278 6.22 -0.0267 NA
279 6.30 -0.0346 NA
280 6.63 0.0624 NA
281 6.72 0.0628 NA
282 6.84 0.0295 NA
283 6.99 0.0392 NA
284 6.9 0.00928 NA
285 6.84 -0.0219 NA
286 6.91 0.000869 NA
287 6.75 -0.0139 NA
288 6.72 -0.0271 NA
289 6.76 0.00177 NA
290 6.68 -0.00629 NA
291 6.88 0.0174 NA
292 6.81 0.0185 NA
293 6.75 -0.0190 NA
294 6.62 -0.0281 0.0950
295 6.62 -0.0196 NA
296 6.61 -0.00121 NA
297 6.95 0.0466 NA
298 7.20 0.0816 NA
299 7.22 0.0374 NA
300 7.06 -0.0204 NA
理想情況下,我希望(例如)重復值 0.0927,直到出現下一個值 0.104。而后者以相同的方式(模式)重復。我該如何進行替換?
然后 plot 他們在一起?
使用代表最后一次出現結轉的 na.locf0。 下面我們簡化了代碼。 如果您想要單獨的面板,請省略 facet = NULL。 下面的代碼不使用 dplyr,因此如果您沒有加載 dplyr,您可以只寫 lag 代替 stats::lag。 (dplyr 用它自己的不兼容版本破壞了 R 的滯后。)
library(quantmod)
library(fGarch)
library(ggplot2)
garnor <- function(x, alpha = 0.01) {
t <- length(x)
fit <- garchFit(~ garch(1,1), data = x, trace = FALSE, cond.dist = "norm")
m <- fit@fitted
cv <- fit@sigma.t
var <- m+cv*qnorm(1-alpha)
var[t]
}
getSymbols("TSLA", from = "2011-01-01", to = "2022-01-31")
adj <- Ad(TSLA)
y <- na.omit(1 - stats::lag(adj, 2) / adj)
back <- na.locf0(rollapplyr(y, 252, by = 21, garnor))
names(back) <- "Back"
autoplot(cbind(y, back), facets = NULL)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.