作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下数据:
Company Year Variables Data
ABC 2000 Revenue 10
ABC 2001 Revenue 15
ABC 2002 Revenue 12
ABC 2003 Revenue 25
ABC 2004 Revenue 30
CDE 2000 Revenue 5
CDE 2001 Revenue 8
CDE 2002 Revenue 17
CDE 2003 Revenue 9
CDE 2004 Revenue 34
#etc
Company Year Variables Data CAGR
ABC 2000 Revenue 10 NA
ABC 2001 Revenue 15 NA
ABC 2002 Revenue 12 6.27%
ABC 2003 Revenue 25 18.56%
ABC 2004 Revenue 30 35.72%
CDE 2000 Revenue 5 NA
CDE 2001 Revenue 8 NA
CDE 2002 Revenue 17 50.37%
CDE 2003 Revenue 9 4.00%
CDE 2004 Revenue 34 25.99%
CAGR for 2004=((LastYear/PreviousYear)^(1/n))-1
For example for n = 2
LastYear =2004
PreviousYear =2004-2 = 2002
library(tibble)
library(dplyr)
library(lubridate)
year<-c(rep(2000:2004,2))
company<-rep(c("ABC","CDE"),5)
variable<-rep("revenue",10)
data<-c(10,15,12,25,30,5,8,17,9,34)
tibdf<-tibble(company,year,variable,data)
View(tibdf)
#revenue2004<-tibdf%>%filter(year==2004)%>%select(company,data)
#revenue2002<-tibdf%>%filter(year==2001)%>%select(company,data)
annual.growth.rate <- function(a){
T1 <- max(a$year) - min(a$year)+1
FV <- a[which(a$year == max(a$year)),"data"]
SV <- a[which(a$year == min(a$year)),"data"]
cagr <- ((FV/SV)^(1/T1)) -1
}
最佳答案
这是一种方法:
library(tidyverse)
df %>%
arrange(Company, Year) %>% #in case the years are not in order (here they are)
group_by(Company) %>%
mutate(lagY = lag(Year), #get the lag year
lagD = lag(Data), #get lad Data
t = Year - lagY, #calculate time
CAGR = (Data / lagD)^(1/t) - 1) %>% #calculate CAGR
select(-lagY, -lagD, -t) #remove unwanted variables
#output:
Company Year Variables Data CAGR
<fct> <int> <fct> <int> <dbl>
1 ABC 2000 Revenue 10 NA
2 ABC 2001 Revenue 15 0.500
3 ABC 2002 Revenue 12 - 0.200
4 ABC 2003 Revenue 25 1.08
5 ABC 2004 Revenue 30 0.200
6 CDE 2000 Revenue 5 NA
7 CDE 2001 Revenue 8 0.600
8 CDE 2002 Revenue 17 1.12
9 CDE 2003 Revenue 9 - 0.471
10 CDE 2004 Revenue 34 2.78
df %>%
arrange(Company, Year) %>%
group_by(Company) %>%
mutate(CAGR = (Data/lag(Data))^(1/(Year-lag(Year))) - 1)
df <- read.table(text ="Company Year Variables Data
ABC 2000 Revenue 10
ABC 2001 Revenue 15
ABC 2002 Revenue 12
ABC 2003 Revenue 25
ABC 2004 Revenue 30
CDE 2000 Revenue 5
CDE 2001 Revenue 8
CDE 2002 Revenue 17
CDE 2003 Revenue 9
CDE 2004 Revenue 34", header = T)
关于r - 使用 dplyr 在 R 中进行动态 CAGR 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48984116/
我有一个数据框,其中包含许多公司的年度价格和股息数据。我希望通过将三年内收到的所有股息与期末股价相加,然后计算复合年增长率来计算 3 年年化返回。我知道如何计算 CAGR,但我遇到的问题是将这段时间收
我正在处理公司数据。我有一个大约 1900 家公司(索引)和每家公司 30 个变量(列)的数据集。这些变量总是三个成对出现(三个句点)。基本上看起来像这样 df = pd.DataFrame({'id
给定以下数据框: df = pd.DataFrame({'A' : ['1','2','3','7'], 'B' : [7,6,5,4],
我有以下数据: Company Year Variables Data ABC 2000 Revenue 10 ABC 2001
我是一名优秀的程序员,十分优秀!