首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算每月报表数据的3个月回报

计算每月报表数据的3个月回报
EN

Stack Overflow用户
提问于 2017-12-05 04:02:51
回答 2查看 60关注 0票数 1

我有每月股票回报的数据:

代码语言:javascript
复制
d<-data.frame(replicate(5,sample(rnorm(1),6,rep=TRUE)))

现在,我想以以下方式将这些返回转换为n个月的返回(例如,对于n=3):

代码语言:javascript
复制
d[1,1]=(1+d[1,1])*(1+d[2,1])*(1+d[3,1])
d[2,1]=(1+d[2,1])*(1+d[3,1])*(1+d[4,1])
d[3,1]=(1+d[3,1])*(1+d[4,1])*(1+d[5,1])

下一篇专栏也是如此:

代码语言:javascript
复制
d[1,2]=(1+d[1,2])*(1+d[2,2])*(1+d[3,2])
d[2,2]=(1+d[2,2])*(1+d[3,2])*(1+d[4,2])
d[3,2]=(1+d[3,2])*(1+d[4,2])*(1+d[5,2])

我想你知道这个主意了。

现在,我的想法是:

代码语言:javascript
复制
apply(d, 2, fun)

其中,乐趣被定义为:

代码语言:javascript
复制
fun<-function(df_column)
{
  # Loop over df_column rows
 for (row in 1:nrow(df_column)) {
   d[row]=(1+d[row])*(1+d[row+1])*(1+d[row+2])
 }
}

这种方法有意义吗?还是有一种更优雅的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-05 04:39:49

根据您喜欢的内容,尝试使用以下形式之一的rollapply。第一行将NAs放在最后两行。第二行用部分产品填充它们,第三行删除最后两行。3参数指定滚动产品的宽度,如果要尝试其他宽度,则可以更改。有关更多信息,请参见?rollapply

代码语言:javascript
复制
library(zoo)

rollapplyr(d + 1, 3, prod, align = "left", fill = NA)

rollapplyr(d + 1, 3, prod, align = "left", partial = TRUE)

rollapplyr(d + 1, 3, prod, align = "left")
票数 2
EN

Stack Overflow用户

发布于 2017-12-05 04:34:35

您可以使用purrr::map_dfdplyr::lead来实现您所追求的目标。

代码语言:javascript
复制
library(dplyr)
library(purrr)

set.seed(42)

df <- data.frame(replicate(5, rnorm(6)))

df %>%
  map_df(function(x) {

    (1 + x) * (1 + lead(x, 1)) * (1 + lead(x, 2))

  })

# # A tibble: 6 x 5
#          X1       X2         X3         X4         X5
#       <dbl>    <dbl>      <dbl>      <dbl>      <dbl>
# 1 1.4068610 6.863243 -0.2430606 -2.3172461  1.2246900
# 2 0.9688954 2.561324  1.0225645 -1.2568729 -0.3228241
# 3 3.1256224 6.520767  1.0148172 -0.4485965 -0.8276191
# 4 2.0496361 7.100212 -1.9395879 -1.4328679 -0.4011510
# 5        NA       NA         NA         NA         NA
# 6        NA       NA         NA         NA         NA

N.B.当您展望两项记录时,请注意,最后两行只会产生NA。如果希望将na.omittidyr::drop_na排除在外,可以将它们添加到管道中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47645897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档