R 许多公司的原木收益率计算
我有一个这样的文件R 许多公司的原木收益率计算,r,logging,return,stock,ln,R,Logging,Return,Stock,Ln,我有一个这样的文件 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
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])))))
试试这个:
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
如果你能更准确地理解“失败”是什么意思,那会很有帮助。例如,添加错误消息。请参阅有关好问题的更多信息 在任何情况下,我怀疑如果用以下代码替换代码,它应该会工作
logs=data.frame( cbind.data.frame(Historical_Stock_Prices_R["Date1",-1], diff(as.matrix(log(Historical_Stock_Prices_R[,-1])))))
代码失败的原因是您的环境中可能没有名为“newdates”的对象,因此您必须引用原始数据帧。
之后可以重命名该列 使用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
>库(TTR)
>股票
日期1 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 rocMSFT
[1] NA-0.0003842896 0.0038372143
但也要看看dailyReturn:计算quantmod的每日回报
在给出代码cbind.data.frame(date=Historical\u Stock\u Prices\u R$Date1[2:3],apply(Historical\u Stock\u Prices\u R[,2:4],2,function(x)log(x[-1]/x[-length(x)]*100)后,它在data.frame(…,check.names=FALSE)中显示了这个错误:参数意味着行数不同:22245>我的错,那是因为我使用了你的示例(2行)你的矩阵大概更大。我替换了
df$Date1[2:nrow(df)]
,这应该可以解决问题。(注意df=Historical_Stock_Prices_R)对不起,我理解了ind.data.frame(date=df$Date1[2:nrow(df)],apply(df[,2:4],2,函数(x)log(x[-1]/x[-length(x)]*100)df$Date1中的错误:“closure”类型的对象不是子附件p:)您可以替换paste0(圆形(log(log(x[-1]/x[-length(x)]*100,digits=2),“%”)
以获得所需的输出,包括2个dec points和%
表示部分工作。在data.frame(…,check.names=FALSE)中发出此警告消息:行名称是从短变量中找到的,已被丢弃。输出类似于thisNA,而不是值