4

我正在尝试以以下形式计算 R 中两点之间的百分比变化:

(X_(i+1) - X_(i))/(X_(i))

到目前为止,这是我想出的:

#x is a vector from the dataframe
#lag is distance between two points being compared
percent_change = function(x,lag = 1)
{
    n = length(x)
    pchange = c((x[(1+lag):n] - x[1:(n-lag)])/x[1:(n-lag)],NA)
    return(pchange)
}

但是,为了在 RI 中完成此任务,必须绑定 NA 以避免:

Error in \`$<-.data.frame\`(\`*tmp*\`, "Change", value = c(0.00248221082243916,  : 
  replacement has 4616 rows, data has 4617

有了这个添加,操作就会发生并与我计算出的应该在纸上对齐。

有没有办法让我不必附加 NA?

4

2 回答 2

10

NA如果要将pc_change结果存储回原始数据框中,则确实需要:

由于数组的最后一个元素没有x+1可比较的元素,因此它会产生一个比原始元素短的向量 1(或滞后)。


警告:请注意,您NA添加了一个 - 这对于这种情况是正确的,lag=1但更一般地说,您需要lag×NA元素。

尝试替换NArep(NA,lag).


这是使用内置函数的更紧凑的函数版本diff

pcchange=function(x,lag=1) c(diff(x,lag),rep(NA,lag))/x
于 2012-09-09T20:30:23.807 回答
1

对我来说,添加 NA 似乎是一个有效的解决方案。但是,有一些函数可以执行这种操作。看一下lag获取滞后时间序列的函数。一般来说,对于时间序列分析,请查看用于处理时间序列的xtszoo包。专用于时间序列的CRAN TaskView也是一个有价值的信息来源。

于 2012-09-09T20:26:35.090 回答