计算数字向量的变化率

时间:2019-02-27 00:10:16

标签: r

我想计算数字向量的变化率,但是计算的分母应该是向量中的第一个数字。

我可以计算数字向量之间的变化率,但无法提出一种方法,使第一个数字成为计算的分母

我不想要这个答案

x <- seq(5, 5.5, 0.1)
TTR::ROC(x, type = "discrete")
[1]         NA 0.02000000 0.01960784 0.01923077 0.01886792 0.01851852

我想生成

0.02    0.019607843 0.019230769 0.018867925 0.018518519

谁会知道一个方便的超快速功能。

1 个答案:

答案 0 :(得分:2)

定义自己的函数很容易

rr1 <- function(x) diff(x) / x[-length(x)]
rr1(x)
#[1] 0.02000000 0.01960784 0.01923077 0.01886792 0.01851852

或具有经典的for循环

rr2 <- function(x) {
    r <- numeric(length(x) - 1)
    for (i in 1:(length(x) - 1)) r[i] <- (x[i + 1] - x[i]) / x[i]
    r
}
rr2(x)
#[1] 0.02000000 0.01960784 0.01923077 0.01886792 0.01851852

对于包含microbenchmark项的较大向量x,这两种方法的10^4比较

x <- seq(1, 1000, length.out = 10^4)
library(microbenchmark)
res <- microbenchmark(
    rr1 = rr1(x),
    rr2 = rr2(x))
#Unit: microseconds
# expr      min       lq      mean    median        uq       max neval cld
#  rr1  157.596  190.554  518.0451  472.6565  501.5825  9565.411   100  a
#  rr2 2057.669 2098.655 2397.8759 2121.2795 2227.8395 10124.874   100   b