[英]Calculating a rolling return
我有一個包含 3 列的數據框。 我想要做的是計算每個月期間(或換句話說,每一行)(如果可用)在選定月份滾動期間的回報率的乘積。 這是數據的基本結構。
set.seed = 100
assets <- c("A", "B", "C", "D", "E", "F", "G", "H", "I")
FileDate <- seq(as.Date("2011-12-30"), as.Date("2019-01-31"), by="months")
df <- merge(x = assets, y = FileDate, all.x = TRUE)
df$return <- runif(774, min=0, max=1)
它應該以 dataframe 結尾,其中添加了一個新列,其中包含該時間范圍內的選定期間累計回報。 例如,我在下面顯示了四個月的回報。 根據數據計算 2012 年 3 月 30 日的 4 個月回報率為:((1+0.81/100) (1+0.715/100) (1+0.27/100)*(1+0.80/100) -1)*100
這將對 X 列下的每個值重復。
我最終使用了 mutate function 在那里你可以設置滯后寬度。 我想要的最終版本
library(dplyr)
library(zoo)
# Create Test Dataframe
set.seed = 100
assets <- c("A", "B", "C", "D", "E", "F", "G", "H", "I")
FileDate <- seq(as.Date("2011-12-30"), as.Date("2019-01-31"), by="months")
df <- merge(x = assets, y = FileDate, all.x = TRUE)
df$performance <- runif(774, min=0, max=1)
這個特定的代碼在滾動的基礎上創建了 5 個月的平均值。 如果按 X 列排序,您可以在 excel 中看到並重新創建它。
df <- df %>%
group_by(x) %>%
mutate(x_mean = rollmean(performance, 5, fill = NA, align = 'right'))
我還找到了一種創建滯后的方法,這樣我就可以將 4 個先驗值用於觀察並計算平均值:
df2 = df %>%
mutate(perf.4.previous = rollapply(data = perf.1.previous, width = 4, FUN =
mean, align = "right", fill = NA, na.rm = T))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.