Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将指数从100开始的列添加到股票价格/回报矩阵中_R_Loops_Matrix_Indexing_Quantmod - Fatal编程技术网

R 将指数从100开始的列添加到股票价格/回报矩阵中

R 将指数从100开始的列添加到股票价格/回报矩阵中,r,loops,matrix,indexing,quantmod,R,Loops,Matrix,Indexing,Quantmod,我最近开始使用R来计算财务数据,所以请耐心听我说。我会尽量说得具体一些 我要做的是:使用quantmod软件包中的R,我将财务数据加载到一个矩阵中,然后添加一个包含每日收益的列,如下所示: > getSymbols("^GDAXI",from="1900-01-01") > "GDAXI" > GDAXI$Returns<-dailyReturn(Cl(GDAXI)) > head(GDAXI) GDAXI.Open GDAXI.Hig

我最近开始使用R来计算财务数据,所以请耐心听我说。我会尽量说得具体一些

我要做的是:使用quantmod软件包中的R,我将财务数据加载到一个矩阵中,然后添加一个包含每日收益的列,如下所示:

> getSymbols("^GDAXI",from="1900-01-01")
> "GDAXI"
> GDAXI$Returns<-dailyReturn(Cl(GDAXI))
> head(GDAXI)
               GDAXI.Open GDAXI.High GDAXI.Low GDAXI.Close GDAXI.Volume GDAXI.Adjusted  Returns
1990-11-26     1466.3     1466.3     1443.2    1443.2      0            1443.2          0.000000000
1990-11-27     1438.3     1438.3     1415.3    1415.3      0            1415.3         -0.019332040
1990-11-28     1410.0     1431.9     1402.8    1420.6      0            1420.6          0.003744789
1990-11-29     1420.4     1424.6     1415.8    1418.9      0            1418.9         -0.001196677
1990-11-30     1421.5     1443.9     1421.5    1441.2      0            1441.2          0.015716400
1990-12-03     1470.1     1476.6     1458.7    1462.6      0            1462.6          0.014848737
然后,我试着

> GDAXI$Index<-ifelse(index(GDAXI$Returns)==index(first(GDAXI)),100,lag(GDAXI$Index,1)*(1+GDAXI$Returns))
我只需要一个列,其中包含以下值(如图所示手动添加):


请帮忙!以前用VBA编程,我可能是用错误的方法实现的。但是搜索网络和stackoverflow还没有让我找到解决方案。多谢各位

看看cbind命令


我想这就是你需要的。

你可以用收盘价列除以它的第一个值

library(quantmod)
ind <- function(x) {
  coredata(x) <- t(
    t(coredata(x)) / 
    apply(coredata(x),2,function(u){ c(u[!is.na(u)&u!=0],NA)[1] })
   )
  x
}
getSymbols("^GDAXI",from="1900-01-01")
GDAXI$Index <- 100 * ind( Cl(GDAXI) )
库(quantmod)

谢谢你的回答,文森特。你的代码工作得很好。我不熟悉“coredata”和“is.na”函数。R代码看起来很神秘。:)又来了!
> GDAXI$Index<-ifelse(index(GDAXI$Returns)==index(first(GDAXI)),100,lag(GDAXI$Index,1)*(1+GDAXI$Returns))
Error in hasTsp(x) : attempt to set an attribute on NULL
1990-11-26  100.00
1990-11-27   98.066796
1990-11-28   98.4340255
1990-11-29   98.3162417
1990-11-30   99.8614191
1990-12-03  101.344235
library(quantmod)
ind <- function(x) {
  coredata(x) <- t(
    t(coredata(x)) / 
    apply(coredata(x),2,function(u){ c(u[!is.na(u)&u!=0],NA)[1] })
   )
  x
}
getSymbols("^GDAXI",from="1900-01-01")
GDAXI$Index <- 100 * ind( Cl(GDAXI) )