将函数应用于指定范围;变化率

时间:2012-12-06 19:05:01

标签: r apply

  

可能重复:
  Calculating moving average in R

我在R中编写了一个变化率函数,定义为:

rateChange <- function(x) ((last(x)-first(x))/first(x))*100

它适用于各种日期范围,例如5天,10天,200天等的变化率。但是,我现在需要在每天之间应用此功能。例如,要确定5天的变化率,就需要过去的6次数据观察。

以下是Excel中的示例,为清楚起见,我正在尝试重现“更改率”列:

data

谢谢!

3 个答案:

答案 0 :(得分:6)

我建议使用TTR::ROC

library(TTR)
roc <- c(18.89, 18.93, 18.55, 18.77, 18.87, 18.91)
ROC(roc, type="discrete")*100
# [1]         NA  0.2117522 -2.0073957  1.1859838  0.5327651  0.2119767

答案 1 :(得分:4)

x <- rnorm(5)
x
#[1] -0.48504744 -1.71843913  0.03890147 -2.11410329 -1.59765182
100*(tail(x, -1) - head(x, -1))/head(x, -1)
#[1]   254.28269  -102.26377 -5534.50754  -24.42887

如果你需要它与输入矢量的长度相同,你可以像这样在最后添加一个NA

c(100*(tail(x, -1) - head(x, -1))/head(x, -1), NA)

答案 2 :(得分:2)

这很接近,但数学(结果)并不完全相同:

 roc <- c(18.89, 18.93, 18.55, 18.77, 18.87, 18.91)
 sapply(seq_along(roc)[-1], function(i) 100*(roc[i] - roc[i-1])/roc[i-1])