我正在努力解决我认为简单的任务。我正在计算一些投资回报,并希望创建一个列,显示返回列旁边的$ 1,000增长。理想情况下,这个:
Index Return
4/27/90 -0.011444191 989
5/30/90 0.000582282 989
6/28/90 0.007011319 996
7/30/90 0.005969896 1,002
10/30/90 0.007221412 1,009
第三列等于上面的值(1 + Return),然后填充。因此,通过乘以1002 *(1 + 0.005969896)
获得1,009的值我试图用滞后功能来做这件事,但是我的头在盯着它看的时间太长了。
我确实成功地使用这个获得了最终数字1,009:
Account = 1000
for (i in na.omit(sample$Return)){
Account = (1+i) * Account
}
但是,我希望将运行总计作为xts对象中的列。怎么办呢?
这将创建我在上表中使用的xts对象而没有第3列。
sample <- structure(c(-0.0114441907965878, 0.000582281990849955, 0.00701131947964186,
0.00596989588048895, 0.00722141248178086), .indexCLASS = "Date", tclass = "Date", tzone = "UTC", src = "yahoo", updated = structure(1414972280.65536, class = c("POSIXct",
"POSIXt")), index = structure(c(641174400, 644025600, 646531200,
649296000, 657244800), tclass = "Date"), .Dim = c(5L, 1L), .Dimnames = list(
NULL, "Return"), class = c("xts", "zoo"))
谢谢。
答案 0 :(得分:2)
尝试cumprod
sample$Account <- 1000 * cumprod(1+sample$Return)
sample
Return Account
1990-04-27 -0.011444191 988.5558
1990-05-30 0.000582282 989.1314
1990-06-28 0.007011319 996.0665
1990-07-30 0.005969896 1002.0130
1990-10-30 0.007221412 1009.2489