计算数据框内的每日日志返回

时间:2013-08-02 03:34:46

标签: r dataframe time-series

我是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

2 个答案:

答案 0 :(得分:2)

问题是您正在尝试为原始数据框创建不同长度的新列。 (新专栏少了一个元素,因为你正在分歧。)

这样做的一个有点笨拙的方法是

z = with(data, diff(log(data$MKT_au)))
data$MR_au = cbind(data, c(NA,z))

答案 1 :(得分:1)

你可以在一行中完成这项工作。您使用diff(log())的方法几乎是正确的。 使用

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

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