Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/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 许多公司的原木收益率计算_R_Logging_Return_Stock_Ln - Fatal编程技术网

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,而不是值