数据表上r的行式迭代

数据表上r的行式迭代,r,data.table,R,Data.table,上述代码生成以下结果: library(quantmod) library(PerformanceAnalytics) getSymbols("YHOO",src="google") stock_dat=data.table(PerformanceAnalytics:: CalculateReturns(Cl(YHOO)[1:10],'discrete')) stock_dat[,Price:=0] stock_dat[1,2]=Cl(YHOO)[1] stock_dat[,D:=(1+YHOO

上述代码生成以下结果:

library(quantmod)
library(PerformanceAnalytics)
getSymbols("YHOO",src="google")
stock_dat=data.table(PerformanceAnalytics::
CalculateReturns(Cl(YHOO)[1:10],'discrete'))
stock_dat[,Price:=0]
stock_dat[1,2]=Cl(YHOO)[1]
stock_dat[,D:=(1+YHOO.Close)*shift(Price,1)] 
库存数据 YHOO,收盘价D 1:NA 25.61 NA 2: 0.048418586 0.00 26.85 3: 0.033147114 0.00 0.00 4: 0.006488825 0.00 0.00 5: -0.012177650 0.00 0.00 6: 0.040609137 0.00 0.00 7: 0.017421603 0.00 0.00 8: 0.008561644 0.00 0.00 9: -0.005432937 0.00 0.00 10: -0.008193923 0.00 0.00 假设YHOO.Close是一个模拟回报,我需要从中扣除价格。我用第一个价格作为基础。上述代码需要理想地使用第3行D中的价格

stock_dat YHOO.Close Price D 1: NA 25.61 NA 2: 0.048418586 0.00 26.85 3: 0.033147114 0.00 0.00 4: 0.006488825 0.00 0.00 5: -0.012177650 0.00 0.00 6: 0.040609137 0.00 0.00 7: 0.017421603 0.00 0.00 8: 0.008561644 0.00 0.00 9: -0.005432937 0.00 0.00 10: -0.008193923 0.00 0.00
nrowsDF您可以这样使用累积产品:

nrowsDF <- nrow(stock_dat)

for(i in 2:nrowsDF){
  stock_dat[i,2]=(1+stock_dat[i,1,with=FALSE])*stock_dat[i-1,2,with=FALSE]
}

DT您可以这样使用累积乘积:

nrowsDF <- nrow(stock_dat)

for(i in 2:nrowsDF){
  stock_dat[i,2]=(1+stock_dat[i,1,with=FALSE])*stock_dat[i-1,2,with=FALSE]
}

DT
shift(Price,1)
对于除第一个条目外的所有条目都为0。而且粘贴的代码不会运行。您需要:
stock\u dat=data.table(PerformanceAnalytics::CalculateReturns(Cl(YHOO[1:10]),'discrete'))
@Imo第二个条目需要使用DIs中的价格,这应该用于计算增长,其中
YHOO.Close
是行与行之间的百分比变化,而
price
是基础?如果你粘贴你想要的结果也会有帮助。这是你想要的吗<代码>股票数据[1:10,2]=Cl(YHOO)[1:10]
股票数据[,D:=(1+YHOO.Close)*移位(价格,1),]
。此外,您所需的结果已在
YHOO中。除第一个条目外,所有条目的关闭
shift(Price,1)
均为0。此外,您粘贴的代码不会运行。您需要:
stock\u dat=data.table(PerformanceAnalytics::CalculateReturns(Cl(YHOO[1:10]),'discrete'))
@Imo第二个条目需要使用DIs中的价格,这应该用于计算增长,其中
YHOO.Close
是行与行之间的百分比变化,而
price
是基础?如果你粘贴你想要的结果也会有帮助。这是你想要的吗<代码>股票数据[1:10,2]=Cl(YHOO)[1:10]
股票数据[,D:=(1+YHOO.Close)*移位(价格,1),]
。此外,您所需的结果已在
YHOO中。请关闭
谢谢。非常简单和快速。我想知道,在上面的示例中,如果不使用“Price”和“D”列,是否可以不使用两列来执行相同的操作。对于每个列“YHOO.CLose”,获取一个“res”作为输出(上面的示例只有一个“YHOO.CLose”),当然可以。您只需要
YHOO.Close
列(如果第一个元素是零而不是
NA
),以及相应的起始价格。然后您可以在data.table中使用
Map
(或者
lappy
,如果您只有一个起始价格)。谢谢。非常简单和快速。我想知道,在上面的示例中,如果不使用“Price”和“D”列,是否可以不使用两列来执行相同的操作。对于每个列“YHOO.CLose”,获取一个“res”作为输出(上面的示例只有一个“YHOO.CLose”),当然可以。您只需要
YHOO.Close
列(如果第一个元素是零而不是
NA
),以及相应的起始价格。然后您可以在data.table中使用
Map
(或者
lappy
,如果您只有一个起始价格)。
DT <- fread("      YHOO.Close Price     D
                     NA 25.61    NA
            0.048418586  0.00 26.85
            0.033147114  0.00  0.00
            0.006488825  0.00  0.00
           -0.012177650  0.00  0.00
            0.040609137  0.00  0.00
            0.017421603  0.00  0.00
            0.008561644  0.00  0.00
           -0.005432937  0.00  0.00
           -0.008193923  0.00  0.00")

DT[, res := Price[1] * c(1, cumprod(1 + YHOO.Close[-1]))]
#      YHOO.Close Price     D   res
# 1:           NA 25.61    NA 25.61
# 2:  0.048418586  0.00 26.85 26.85
# 3:  0.033147114  0.00  0.00 27.74
# 4:  0.006488825  0.00  0.00 27.92
# 5: -0.012177650  0.00  0.00 27.58
# 6:  0.040609137  0.00  0.00 28.70
# 7:  0.017421603  0.00  0.00 29.20
# 8:  0.008561644  0.00  0.00 29.45
# 9: -0.005432937  0.00  0.00 29.29
#10: -0.008193923  0.00  0.00 29.05