我是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
答案 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而不是系列的开头非常重要。