首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用R计算CAGR?

如何用R计算CAGR?
EN

Stack Overflow用户
提问于 2022-01-12 03:35:13
回答 1查看 213关注 0票数 0

我有以下数据

代码语言:javascript
复制
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如下,但这实际上只是提供逐年增长。

代码语言:javascript
复制
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)))

但我想让它看起来像这样

感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-12 04:28:49

您可以用这种方式编写自己的CAGR函数。

代码语言:javascript
复制
CAGR <- function(x) {
  if (length(x) < 1L)
    return(numeric())
  out <- (x / x[[1L]]) ^ (1 / (seq_along(x) - 1)) - 1
  out[[1L]] <- NA_real_
  out
}

测试

代码语言:javascript
复制
> CAGR(df$Total)
[1]          NA  0.04453582  0.03565420  0.04395396  0.05781696 -0.12708232
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70676028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档