首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将函数应用到指定的范围;变化率

将函数应用到指定的范围;变化率
EN

Stack Overflow用户
提问于 2012-12-06 19:05:01
回答 3查看 3.2K关注 0票数 1

可能重复: Calculating moving average in R

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

代码语言:javascript
复制
rateChange <- function(x) ((last(x)-first(x))/first(x))*100

它非常适用于不同的日期范围,如5天、10天、200天的变化率等。然而,我现在需要在每天之间应用这个功能。例如,要确定5天的变化速度,需要对过去的6个数据进行观察。

下面是Excel中的一个例子,为了清楚起见,我试图复制“变化率”一栏:

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-06 19:42:20

我建议使用TTR::ROC

代码语言:javascript
复制
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
票数 6
EN

Stack Overflow用户

发布于 2012-12-06 19:23:39

代码语言:javascript
复制
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

如果需要与输入向量相同的长度,只需将安娜添加到末尾,如下所示

代码语言:javascript
复制
c(100*(tail(x, -1) - head(x, -1))/head(x, -1), NA)
票数 4
EN

Stack Overflow用户

发布于 2012-12-06 19:18:14

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

代码语言:javascript
复制
 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])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13750683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档