我希望根据投资者分组的每个季度的列值来计算累积回报。我尝试使用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))
答案 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