计算投资者每个季度的累计回报

时间:2019-02-05 18:45:16

标签: r

我希望根据投资者分组的每个季度的列值来计算累积回报。我尝试使用Return.cumulative,但没有成功。

如果有人可以通过一些简单的方法来计算R中的累计收益,我是否感到感谢?

structure(list(Quarter = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 
7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 
20L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 
14L, 15L, 16L, 17L, 18L, 19L, 20L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 
8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 
1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
15L, 16L, 17L, 18L, 19L, 20L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 1L, 
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 
16L, 17L, 18L, 19L, 20L), .Label = c("2012Q1", "2012Q2", "2012Q3", 
"2012Q4", "2013Q1", "2013Q2", "2013Q3", "2013Q4", "2014Q1", "2014Q2", 
"2014Q3", "2014Q4", "2015Q1", "2015Q2", "2015Q3", "2015Q4", "2016Q1", 
"2016Q2", "2016Q3", "2016Q4"), class = "factor"), Total_Return = c(0.040561972, 
0.012692509, 0.053079761, 0.048656856, 0.037110412, 0.041422455, 
0.052373109, 0.049826591, 0.053255331, 0.050956964, 0.038683073, 
0.018446161, 0.039546641, 0.057108385, 0.020790648, 0.020743042, 
0.015486459, 0.001202289, 0.066082963, 0.036178889, 0.037096464, 
0.003068485, 0.026307213, 0.052918456, 0.019292362, 0.058390755, 
0.040255949, 0.020420614, 0.024955646, 0.051180526, 0.04598829, 
0.012425778, 0.036190369, 0.079480322, 0.00574259, 0.026401296, 
0.018309495, 0.004887553, 0.05935355, 0.051702238, 0.080892981, 
0.07076032, 0.088251171, 0.045903253, 0.029692483, 0.058297815, 
0.065338687, 0.071947108, 0.074878083, 0.03989637, -0.031255434, 
0.029883299, 0.008148657, 0.078836907, 0.030064965, 0.048887451, 
0.034827005, -0.065304898, 0.136766281, 0.019039148, 0.075818622, 
0.037509338, 0.060238115, 0.03877549, 0.027433037, 0.033627931, 
0.053488836, 0.024999278, 0.016037836, 0.011863841, -0.02610323, 
0.046568702, 0.021033516, 0.052322078, 0.038724408, 0.023703685, 
0.013482776, 0.018159864, 0.01098064, 0.014761168, 0.010590211, 
0.001237805, 0.097323777, 0.088712748, 0.034759189, 0.022507656, 
0.036512294, 0.048105471, 0.030822456, 0.07172102, 0.029038233, 
0.032163273, 0.015176988, 0.041039802, -0.006245358, 0.049354849, 
0.00318641, 0.012988646, 0.053365281, 0.03352103, 0.030454118, 
-0.011862117, 0.015271336, 0.036371973, 0.045939313, 0.047864175, 
0.053764664, 0.055199293, 0.072631781, 0.063949369, 0.09113885, 
0.012533175, 0.049910727, 0.055676551, 0.008841404, 0.01962578, 
0.015040302, 0.020496695, 0.054345313, 0.052533934), Investor = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("Active", "Total", "America", 
"Africa", "China", "Europe"), class = "factor"), Date = structure(c(6L, 
11L, 16L, 1L, 7L, 12L, 17L, 2L, 8L, 13L, 18L, 3L, 9L, 14L, 19L, 
4L, 10L, 15L, 20L, 5L, 6L, 11L, 16L, 1L, 7L, 12L, 17L, 2L, 8L, 
13L, 18L, 3L, 9L, 14L, 19L, 4L, 10L, 15L, 20L, 5L, 6L, 11L, 16L, 
1L, 7L, 12L, 17L, 2L, 8L, 13L, 18L, 3L, 9L, 14L, 19L, 4L, 10L, 
15L, 20L, 5L, 6L, 11L, 16L, 1L, 7L, 12L, 17L, 2L, 8L, 13L, 18L, 
3L, 9L, 14L, 19L, 4L, 10L, 15L, 20L, 5L, 6L, 11L, 16L, 1L, 7L, 
12L, 17L, 2L, 8L, 13L, 18L, 3L, 9L, 14L, 19L, 4L, 10L, 15L, 20L, 
5L, 6L, 11L, 16L, 1L, 7L, 12L, 17L, 2L, 8L, 13L, 18L, 3L, 9L, 
14L, 19L, 4L, 10L, 15L, 20L, 5L), .Label = c("12/1/2012", "12/1/2013", 
"12/1/2014", "12/1/2015", "12/1/2016", "3/1/2012", "3/1/2013", 
"3/1/2014", "3/1/2015", "3/1/2016", "6/1/2012", "6/1/2013", "6/1/2014", 
"6/1/2015", "6/1/2016", "9/1/2012", "9/1/2013", "9/1/2014", "9/1/2015", 
"9/1/2016"), class = "factor")), class = "data.frame", row.names = c(NA, 
-120L))

1 个答案:

答案 0 :(得分:1)

library(tidyverse)
df %>%
  arrange(Investor, Date) %>%
  group_by(Investor) %>%
  mutate(return_coef = 1 + Total_Return,
         return_coef_cuml = cumprod(return_coef),
         return_cuml = return_coef_cuml - 1) %>%
  ungroup()

# A tibble: 120 x 7
# Groups:   Investor [6]
   Quarter Total_Return Investor Date      return_coef return_coef_cuml return_cuml
   <fct>          <dbl> <fct>    <fct>           <dbl>            <dbl>       <dbl>
 1 2012Q4        0.0487 Active   12/1/2012        1.05             1.05      0.0487
 2 2013Q4        0.0498 Active   12/1/2013        1.05             1.10      0.101 
 3 2014Q4        0.0184 Active   12/1/2014        1.02             1.12      0.121 
 4 2015Q4        0.0207 Active   12/1/2015        1.02             1.14      0.144 
 5 2016Q4        0.0362 Active   12/1/2016        1.04             1.19      0.186 
 6 2012Q1        0.0406 Active   3/1/2012         1.04             1.23      0.234 
 7 2013Q1        0.0371 Active   3/1/2013         1.04             1.28      0.280 
 8 2014Q1        0.0533 Active   3/1/2014         1.05             1.35      0.348 
 9 2015Q1        0.0395 Active   3/1/2015         1.04             1.40      0.401 
10 2016Q1        0.0155 Active   3/1/2016         1.02             1.42      0.423