我有以下数据
df <- structure(list(fin_year = c(2016, 2017, 2018, 2019, 2020, 2021
), Total = c(136661.9, 142748.25, 146580.77, 155486.07, 171115.58,
69265.01)), class = "data.frame", row.names = c(NA, -6L))我想计算增加时间步长的复合年增长(CAGR)。例如,计算第二年的增长率(Y2),比较第一年和第二年的增长率;计算第三年的增长率(Y3),比较Y1与第三年的增长率;计算第四年的增长率(Y3),比较Y1与第四年的增长率,等等。
我可以计算CAGR如下,但这实际上只是提供逐年增长。
YearOverYear<-function (x,periodsPerYear){
if(NROW(x)<=periodsPerYear){
stop("too few rows")
}
else{
indexes<-1:(NROW(x)-periodsPerYear)
return(c(rep(NA,periodsPerYear),(x[indexes+periodsPerYear]-x[indexes])/x[indexes]))
}
}
df1 <- df %>%
cbind(YoY=(round((YearOverYear(test1$Total,1)*100),digits=2)))但我想让它看起来像这样

感谢你的帮助。
发布于 2022-01-12 04:28:49
您可以用这种方式编写自己的CAGR函数。
CAGR <- function(x) {
if (length(x) < 1L)
return(numeric())
out <- (x / x[[1L]]) ^ (1 / (seq_along(x) - 1)) - 1
out[[1L]] <- NA_real_
out
}测试
> CAGR(df$Total)
[1] NA 0.04453582 0.03565420 0.04395396 0.05781696 -0.12708232https://stackoverflow.com/questions/70676028
复制相似问题