r - 计算数字向量的变化率

标签 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

谁知道一个方便的超快速函数。

最佳答案

很容易定义自己的函数

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

以及针对具有 10^4 条目的较大向量 x 的两种方法的微基准比较

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

关于r - 计算数字向量的变化率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54896131/

相关文章:

r - 使用pglm的比例与二进制响应

反转累积总和以确定 R 中的实际值

r - R 中的 tm_map 错误消息

r - 用数据框合并填充 NA

r - 如何保存和编辑电缆打印的内容?

r - 如何给每一行中不等于最大值的那个赋值?

r - 从下一行的值向数据框添加一列

R:绘图:as.double(x) 中的错误:无法将类型 'S4' 强制转换为类型 'double' 的向量

R-3.6 上的 RDCOMClient 安装问题

r - OLS 回归因变量的测量误差?