我很难计算特定年份每一栏的几何日期。我不得不为多列计算。这是在excel中完成的,现在我们想转向r,以吸引更多的读者。以下是Excel中使用的公式
(GEOMEAN(1+DK45:DK48)^4)^(1/4)-1
我尝试从性能库中应用mean.geometric公式,该公式可以准确给出结果,但不确定如何在整个列上按不同季度应用该结果
TotalReturn %>%
mutate(mpgGM = rollapply(l12420, 3, geometric.mean, fill=NA,
align="left"))
我的样本数据集是
structure(list(Quarter = structure(c(18717, 18808, 18900, 18992,
19082, 19173, 19265, 19357, 19447, 19538, 19630, 19722), class = "Date"),
A = c(0.043, 0.044, 0.044, 0.044, 0.044, 0.046, 0.048, 0.049,
0.05, 0.05, 0.05, 0.051), B = c(-0.002, -0.001, 0.002, 0.008,
0.015, 0.02, 0.024, 0.025, 0.025, 0.023, 0.022, 0.022)), row.names = c(NA,
-12L), class = "data.frame")
这是预期的结果
2021 Q4 4.06%
2022 Q4 4.68%
2023 Q4 5.04%
答案 0 :(得分:0)
我们可以根据需要调整implementation,以显示%
。
gmMean <- function(x, na.rm=TRUE) {
paste0(sprintf("%.1f", exp(sum(log(x[x > 0]), na.rm=na.rm) / length(x))*100), "%")
}
然后可以将该功能应用于创建数据框。
res <- data.frame(Year=strftime(dat$Quarter, format="%Y"),
Quarter=factor(substr(dat$Quarter, 6, 7), labels=paste0("Q", 1:4)),
Geom.Mean=apply(dat[-1], 1, gmMean))
res
# Year Quarter Geom.Mean
# 1 2021 Q1 20.7%
# 2 2021 Q2 21.0%
# 3 2021 Q3 0.9%
# 4 2021 Q4 1.9%
# 5 2022 Q1 2.6%
# 6 2022 Q2 3.0%
# 7 2022 Q3 3.4%
# 8 2022 Q4 3.5%
# 9 2023 Q1 3.5%
# 10 2023 Q2 3.4%
# 11 2023 Q3 3.3%
# 12 2023 Q4 3.3%
要获取整年的几何平均值,我们首先要创建年份变量
dat$year <- strftime(dat$Quarter, format="%Y")
然后做
res <- aggregate(. ~ year, dat, gmMean)[-2]
res
# year A B
# 1 2021 4.4% 6.3%
# 2 2022 4.7% 2.1%
# 3 2023 5.0% 2.3%
数据
dat <- structure(list(Quarter = structure(c(18717, 18808, 18900, 18992,
19082, 19173, 19265, 19357, 19447, 19538, 19630, 19722), class = "Date"),
A = c(0.043, 0.044, 0.044, 0.044, 0.044, 0.046, 0.048, 0.049,
0.05, 0.05, 0.05, 0.051), B = c(-0.002, -0.001, 0.002, 0.008,
0.015, 0.02, 0.024, 0.025, 0.025, 0.023, 0.022, 0.022)), row.names = c(NA,
-12L), class = "data.frame")