计算R中两个值之间的百分比变化和一个问题

时间:2012-09-09 20:21:28

标签: r function

我试图以下列形式计算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)
}

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

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

通过这个添加,操作发生并与我计算的应该在纸上对齐。

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

2 个答案:

答案 0 :(得分:9)

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

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


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

尝试将NA替换为NA


这是使用内置rep(NA,lag)函数的函数的更紧凑版本:

diff

答案 1 :(得分:1)

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