1

我是 R 的新手,只是有一个简单的问题。

我有一个包含时间序列财务数据的数据框,并希望计算某些列的日志回报。当我尝试diff(log())在表中使用它时,出现错误消息,说返回的行与现有表不同。

这是因为回报总是比我假设的原始价格数据少一行。我知道我可以将收益单独计算为一些新的数据框,但我希望收益与日期一致。任何人都可以提出解决此问题的方法吗?我正在使用的代码如下:

        Date   MKT_ap   MKT_us   MKT_au 
1 2008-01-02   6237    14613.57  1424303      
2 2008-01-03   6161    14587.92  1418566   


> #compute market, stock and ADR returns
> data$MR_au = with(data, diff(log(data$MKT_au)))
Error in `$<-.data.frame`(`*tmp*`, "MR_au", value = c(-0.00403606867795503,  : 
  replacement has 1226 rows, data has 1227
4

2 回答 2

2

问题是您正在尝试创建与原始数据框长度不同的新列。(新列少了一个元素,因为您正在考虑差异。)

一种稍微笨拙的方法是

z = with(data, diff(log(data$MKT_au)))
data$MR_au = cbind(data, c(NA,z))
于 2013-08-02T04:11:54.043 回答
2

你可以在一行中做到这一点。你的方法diff(log())几乎是正确的。采用

c(diff(log(data)),NA)

反而。这会计算日志返回并在末尾添加一个 NA,因为您会丢失一个观察结果。重要的是将此添加到 END 而不是系列的开头。

于 2014-01-03T13:25:14.733 回答