我试图以下列形式计算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?
你需要做的NA,如果你要存储pc_change结果回到原始数据帧:
由于数组的最后一个元素没有x+1与之进行比较,因此会产生比原始数据短的向量1(或滞后).
警告:请注意,您NA添加了一个- 这对于案例是正确的,lag=1但更一般地说您需要lagx NA元素.
尝试更换NA用rep(NA,lag).
这是使用内置函数的函数的更紧凑版本diff:
pcchange=function(x,lag=1) c(diff(x,lag),rep(NA,lag))/x
Run Code Online (Sandbox Code Playgroud)