2

我正在尝试计算标准普尔 500 指数回报的 SD,但我很难在我的 df,SPY 中创建一个包含每日回报的新列,并且没有错误。基本上我想要:

 SPY$returns <-(8/7/19 close price / 8/6/2019) - 1 ]

我已经尝试了一些事情,我相信这会在返回列中为我提供正确的值,但我一直收到错误消息。

这是我的数据的负责人:

head(SPY)
# A tibble: 6 x 7
  Date       Open  High   Low Close `Adj Close`    Volume
  <chr>     <dbl> <dbl> <dbl> <dbl>       <dbl>     <dbl>
1 8/7/2019   284.  289.  282.  288.        288. 135389300
2 8/6/2019   286.  288.  284.  288.        288. 120711700
3 8/5/2019   288.  288.  282.  284.        284. 178745400
4 8/2/2019   294.  294.  291.  293.        293. 116749700
5 8/1/2019   298.  301.  294.  295.        295. 142646600
6 7/31/2019  301.  301.  295.  297.        297. 104245200
SPY$returns <- diff(Close / Close[-length(Close)] - 1)

这是错误消息:

Error in `$<-.data.frame`(`*tmp*`, returns, value = c(0, 0, 0, 0, 0, 0,  : 
  replacement has 6678 rows, data has 6679
In addition: Warning message:
In Close/Close[-length(Close)] :
  longer object length is not a multiple of shorter object length

任何帮助将不胜感激。

我的问题的替代解释:我想在 R中执行此操作

4

1 回答 1

0

首先,将“日期”列转换为日期类型:

SPY$Date <- lubridate::dmy(SPY$Date)

然后,安排 tibble wrt Date 并创建返回列:

SPY <- SPY %>% arrange(Date) %>% mutate(return = Close/dplyr::lag(Close)-1)
于 2019-08-13T05:06:57.350 回答