我有这样的文件。
head(Historical_Stock_Prices_R)
Date1 MSFT AAPL GOOGL
1 25-01-05 21.02985 4.873362 88.56
2 26-01-05 21.02177 4.886890 94.62
3 27-01-05 21.10259 4.913269 94.04
想要使用此公式ln(当前价格/先前价格)计算日志退货,我的预期输出是这样的
Date1 MSFT AAPL GOOGL
26-01-05 -0.04% 0.28% 6.62%
27-01-05 0.38% 0.54% -0.61%
试图通过此代码从先前的堆栈溢出答案解决但是失败
logs=data.frame( cbind.data.frame(newdates[-1],
diff(as.matrix(log(Historical_Stock_Prices_R[,-1])))))
答案 0 :(得分:0)
试试这个:
df = read.table(text="
Date1 MSFT AAPL GOOGL
1 25-01-05 21.02985 4.873362 88.56
2 26-01-05 21.02177 4.886890 94.62
3 27-01-05 21.10259 4.913269 94.04",header=T)
cbind.data.frame(date=df$Date1[-1],apply(df[,2:4],2,function(x) log(x[-1]/x[-length(x)])*100))
# date MSFT AAPL GOOGL
# 2 26-01-05 -0.03842896 0.2772061 6.6188582
# 3 27-01-05 0.38372143 0.5383395 -0.6148647
答案 1 :(得分:0)
如果您对“失败”的意思更加准确,那将会很有帮助。例如,添加错误消息。在好问题上查看更多here
在任何情况下,我怀疑如果你用以下代码替换你的代码它应该有用。
logs=data.frame( cbind.data.frame(Historical_Stock_Prices_R["Date1",-1], diff(as.matrix(log(Historical_Stock_Prices_R[,-1])))))
您的代码失败的原因是您的环境中可能没有名为“newdates”的对象,因此您必须引用原始数据帧。 然后,您可以重命名该列。
答案 2 :(得分:0)
使用TTR包和ROC
> library(TTR)
> stocks
Date1 MSFT AAPL GOOGL
1 25-01-05 21.02985 4.873362 88.56
2 26-01-05 21.02177 4.886890 94.62
3 27-01-05 21.10259 4.913269 94.04
> rocMSFT <- ROC(stocks[,"MSFT"])
> rocMSFT
[1] NA -0.0003842896 0.0038372143
还要查看dailyReturn:从quantmod计算每日回报 http://www.quantmod.com/documentation/periodReturn.html