【问题标题】:Apply a function to a specified range; Rate of Change [duplicate]将函数应用于指定范围;变化率 [重复]
【发布时间】:2012-11-24 21:34:51
【问题描述】:

可能重复:
Calculating moving average in R

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

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

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

这是 Excel 中的一个示例,为清楚起见,我试图重现“变化率”列:

谢谢!

【问题讨论】:

  • 我投票结束,但我现在认为这个决定是不正确的。

标签: r apply


【解决方案1】:

我建议使用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

【讨论】:

  • 谢谢!这就是解决方案。
  • @user1499626 - 你的意思是“这是 a 解决方案”。在 R 中几乎总是有不止一种方法可以做事。
【解决方案2】:
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)

【讨论】:

    【解决方案3】:

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

     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])
    

    【讨论】:

      猜你喜欢
      • 2021-11-25
      • 1970-01-01
      • 2012-11-20
      • 2013-02-23
      • 2017-08-09
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      相关资源
      最近更新 更多