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

coa*_*ess 4 r function

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

(X_(i+1) - X_(i))/(X_(i))
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止提出的:

#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)
}
Run Code Online (Sandbox Code Playgroud)

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

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

通过这种添加,操作发生并与我计算的应该是纸上的一致.

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

Ale*_*own 9

你需要做的NA,如果你要存储pc_change结果回到原始数据帧:

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


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

尝试更换NArep(NA,lag).


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

pcchange=function(x,lag=1) c(diff(x,lag),rep(NA,lag))/x
Run Code Online (Sandbox Code Playgroud)