[英]Calculating annualized return with uneven panel data set
我有以下面板數據:
id date returns
1 Jan 09 -0.07142857
1 Feb 09 -0.09615385
1 Mrz 09 0.03273322
1 Apr 09 0.14896989
1 May 09 0.06620690
1 Jun 09 -0.01811125
1 Jul 09 -0.07142857
1 Aug 09 -0.09615385
1 Sep 09 0.03273322
1 Oct 09 0.14896989
1 Nov 09 0.06620690
1 Dez 09 -0.01811125
2 Aug 09 -0.09615385
2 Sep 09 0.03273322
2 Oct 09 0.14896989
2 Nov 09 0.06620690
2 Dez 09 -0.01811125
我想獲得的是一個新列,其中包含每年各個ID的年度回報。 如果公司在一年中沒有完整的12個回報,例如本例中的id 2,則年度回報應基於可用的月份:例如RETannual = prod(1 + RETmonthly)^(1/5)
然后,輸出應如下所示:
id date returns RETan
1 Jan 09 -0.07142857
1 Feb 09 -0.09615385
1 Mrz 09 0.03273322
1 Apr 09 0.14896989
1 May 09 0.06620690
1 Jun 09 -0.01811125
1 Jul 09 -0.07142857
1 Aug 09 -0.09615385
1 Sep 09 0.03273322
1 Oct 09 0.14896989
1 Nov 09 0.06620690
1 Dez 09 -0.01811125 0.00697433
2 Aug 09 -0.09615385
2 Sep 09 0.03273322
2 Oct 09 0.14896989
2 Nov 09 0.06620690
2 Dez 09 -0.01811125 0.023432056
我們可以按操作分組
library(tidyverse)
library(zoo)
df1 %>%
group_by(id, year = year(as.yearmon(date, format = "%b %y"))) %>%
mutate(RETan =prod(1+returns)^(1/n()),
RETan = replace(RETan, row_number() < n(), NA_real_))
使用data.table
您可以嘗試
df<- read.table(stringsAsFactors = FALSE, header = TRUE, text ="id date returns
1 Jan-09 -0.07142857
1 Feb-09 -0.09615385
1 Mrz-09 0.03273322
1 Apr-09 0.14896989
1 May-09 0.06620690
1 Jun-09 -0.01811125
1 Jul-09 -0.07142857
1 Aug-09 -0.09615385
1 Sep-09 0.03273322
1 Oct-09 0.14896989
1 Nov-09 0.06620690
1 Dez-09 -0.01811125
2 Aug-09 -0.09615385
2 Sep-09 0.03273322
2 Oct-09 0.14896989
2 Nov-09 0.06620690
2 Dez-09 -0.01811125")
library(data.table)
setDT(df)[, .(RETan = prod(1+returns)^(1/.N)), by = id]
#returns
id RETan
1: 1 1.006974
2: 2 1.023432
當然,我沒有獲得與您相同的格式,為此您可以嘗試:
setDT(df)[, .(date = date, RETan = c(rep(NA,.N-1),prod(1+returns)^(1/.N))), by = id]
#returns
id date RETan
1: 1 Jan-09 NA
2: 1 Feb-09 NA
3: 1 Mrz-09 NA
4: 1 Apr-09 NA
5: 1 May-09 NA
6: 1 Jun-09 NA
7: 1 Jul-09 NA
8: 1 Aug-09 NA
9: 1 Sep-09 NA
10: 1 Oct-09 NA
11: 1 Nov-09 NA
12: 1 Dez-09 1.006974
13: 2 Aug-09 NA
14: 2 Sep-09 NA
15: 2 Oct-09 NA
16: 2 Nov-09 NA
17: 2 Dez-09 1.023432
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.