我想计算数字向量的变化率,但是计算的分母应该是向量中的第一个数字。
我可以计算数字向量之间的变化率,但无法提出一种方法,使第一个数字成为计算的分母
我不想要这个答案
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
谁会知道一个方便的超快速功能。
答案 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