R 按年计算月回报率

R 按年计算月回报率,r,return,R,Return,我试图将下面的DT test1从月度回报转换为年度回报。我试图将它们按“Id”和“hcjun”(会计期间从7月到6月)进行分组 我已经尝试了一个非常基本的形式,但无法让它工作: test1 %>% group_by(hcjun, Id) %>% summarize(annual_return = prod(1 + RET.USD/100) - 1) 理想情况下,在这种情况下,每个ID的输出将为两行,并在1997年实现年化回报 以下是数据: structure(list(hc

我试图将下面的DT test1从月度回报转换为年度回报。我试图将它们按“Id”和“hcjun”(会计期间从7月到6月)进行分组

我已经尝试了一个非常基本的形式,但无法让它工作:

test1 %>%
  group_by(hcjun, Id) %>%
  summarize(annual_return = prod(1 + RET.USD/100) - 1)
理想情况下,在这种情况下,每个ID的输出将为两行,并在1997年实现年化回报

以下是数据:

structure(list(hcjun = c(1997L, 1997L, 1997L, 1997L, 1997L, 1997L, 
1997L, 1997L, 1997L, 1997L, 1997L, 1997L, 1997L, 1997L, 1997L, 
1997L, 1997L, 1997L, 1997L, 1997L, 1997L, 1997L, 1997L, 1997L
), ym = structure(c(1997.5, 1997.58333333333, 1997.66666666667, 
1997.75, 1997.83333333333, 1997.91666666667, 1998, 1998.08333333333, 
1998.16666666667, 1998.25, 1998.33333333333, 1998.41666666667, 
1997.5, 1997.58333333333, 1997.66666666667, 1997.75, 1997.83333333333, 
1997.91666666667, 1998, 1998.08333333333, 1998.16666666667, 1998.25, 
1998.33333333333, 1998.41666666667), class = "yearmon"), Id = c("142521", 
"142521", "142521", "142521", "142521", "142521", "142521", "142521", 
"142521", "142521", "142521", "142521", "142802", "142802", "142802", 
"142802", "142802", "142802", "142802", "142802", "142802", "142802", 
"142802", "142802"), RET.USD = c(-11.14, 6.79, 3.32, 2.04, -0.89, 
1.84, 4.74, -5.05, 3.6, 3.42, 40.1, 21.64, 10.46, -6.58, 12.29, 
-6.36, 0.02, 3.6, 5.14, 4.96, 21.7, 4.95, 5.46, -8.36)), class = c("data.table", 
"data.frame"), row.names = c(NA, -24L), .internal.selfref = <pointer: 0x7fa6c8813ce0>, sorted = "hcjun")
结构(列表(hcjun=c)(1997L、1997L、1997L、1997L、1997L、1997L、1997L、, 1997L,1997L,1997L,1997L,1997L,1997L,1997L,1997L,1997L,1997L,1997L, 1997L,1997L,1997L,1997L,1997L,1997L,1997L,1997L,1997L,1997L,1997L,1997L ),ym=结构(c)(1997.51997.583331997.667, 1997.75, 1997.83333333333, 1997.91666666667, 1998, 1998.08333333333, 1998.16666666667, 1998.25, 1998.33333333333, 1998.41666666667, 1997.5, 1997.58333333333, 1997.66666666667, 1997.75, 1997.83333333333, 1997.91666666667, 1998, 1998.08333333333, 1998.16666666667, 1998.25, 1998.333333331998.4166667),class=“yearmon”),Id=c(“142521”, "142521", "142521", "142521", "142521", "142521", "142521", "142521", "142521", "142521", "142521", "142521", "142802", "142802", "142802", "142802", "142802", "142802", "142802", "142802", "142802", "142802", “142802”,“142802”),美元汇率=c(-11.14,6.79,3.32,2.04,-0.89, 1.84, 4.74, -5.05, 3.6, 3.42, 40.1, 21.64, 10.46, -6.58, 12.29, -6.36,0.02,3.6,5.14,4.96,21.7,4.95,5.46,-8.36),类别=c(“数据表”, “data.frame”),row.names=c(NA,-24L),.internal.selfref=,sorted=“hcjun”) 如果有人能帮助我,我将不胜感激


最好,Fred

请添加一个您希望输出的示例,并将您的问题设置为一个最小示例,例如,使用可复制的示例data.frame。您好,谢谢您的评论!现在清楚了吗?你还没有真正解释你为什么要把他们分组。现在你的代码基本上是识别hcjun和id的唯一连词,然后在每个组中,它将每行除以100,再加上1,将它们全部相乘,然后减去1。这似乎不是你想要的,但同样不清楚你为什么要分组。似乎你真的想按月计算,然后以某种方式进行合计,但不清楚。好吧,我想按Id显示按年计算的回报。我没有一个真正的起点,但我的“尝试”中的计算将产生按年计算的回报。@FreddyMüller Why“在这种情况下,每个Id的输出将是两行”当你在hcjun栏中有一年的时间?
structure(list(hcjun = c(1997L, 1997L, 1997L, 1997L, 1997L, 1997L, 
1997L, 1997L, 1997L, 1997L, 1997L, 1997L, 1997L, 1997L, 1997L, 
1997L, 1997L, 1997L, 1997L, 1997L, 1997L, 1997L, 1997L, 1997L
), ym = structure(c(1997.5, 1997.58333333333, 1997.66666666667, 
1997.75, 1997.83333333333, 1997.91666666667, 1998, 1998.08333333333, 
1998.16666666667, 1998.25, 1998.33333333333, 1998.41666666667, 
1997.5, 1997.58333333333, 1997.66666666667, 1997.75, 1997.83333333333, 
1997.91666666667, 1998, 1998.08333333333, 1998.16666666667, 1998.25, 
1998.33333333333, 1998.41666666667), class = "yearmon"), Id = c("142521", 
"142521", "142521", "142521", "142521", "142521", "142521", "142521", 
"142521", "142521", "142521", "142521", "142802", "142802", "142802", 
"142802", "142802", "142802", "142802", "142802", "142802", "142802", 
"142802", "142802"), RET.USD = c(-11.14, 6.79, 3.32, 2.04, -0.89, 
1.84, 4.74, -5.05, 3.6, 3.42, 40.1, 21.64, 10.46, -6.58, 12.29, 
-6.36, 0.02, 3.6, 5.14, 4.96, 21.7, 4.95, 5.46, -8.36)), class = c("data.table", 
"data.frame"), row.names = c(NA, -24L), .internal.selfref = <pointer: 0x7fa6c8813ce0>, sorted = "hcjun")