我试图以下列形式计算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?
答案 0 :(得分:9)
如果要将NA
结果存储回原始数据框,则需要pc_change
:
由于数组的最后一个元素没有与x+1
进行比较,因此会产生比原始数据短的向量1(或滞后)。
警告:请注意,您添加了一个NA
- 这对于案例lag=1
是正确的,但更一般地说您需要lag
×{{1元素。
尝试将NA
替换为NA
。
这是使用内置rep(NA,lag)
函数的函数的更紧凑版本:
diff
答案 1 :(得分:1)
对我来说,添加NA似乎是一个有效的解决方案。但是,有一些功能可以执行这种操作。查看lag
函数以获得滞后的时间序列。通常,对于时间序列分析,请查看用于处理时间序列的xts
和zoo
包。 CRAN TaskView dedicated to timeseries也是一个有价值的信息来源。