我正在尝试根据一列数据的移动平均值计算数值范围。我找到了一种用于caTools::runmean
生成移动平均线列的方法,并且我知道如何在 Excel 中使用它来生成我想要的列,但我很想知道一种在一个 R 脚本中完成所有这些操作的方法。
这是我对 R 的简化可重现示例。
library(tidyverse)
library(caTools)
data <- as_tibble(data.frame(
Index = as.integer(c(18,19,21,22,23,25,26,29)),
mydbl = c(8.905,13.31,15.739,17.544,19.054,20.393,21.623,22.764)))
data <- data %>%
mutate(avg = runmean(mydbl,
k = 2,
alg = "exact",
endrule = "NA"))
这个小标题看起来像这样:
> data
# A tibble: 8 x 3
Index mydbl avg
<int> <dbl> <dbl>
1 18 8.90 NA
2 19 13.3 11.1
3 21 15.7 14.5
4 22 17.5 16.6
5 23 19.1 18.3
6 25 20.4 19.7
7 26 21.6 21.0
8 29 22.8 22.2
为了生成我想要的剩余数据,我将其导出到 Excel 中write_csv(data,...)
,最终表格如下所示。中的第一个值dbl_i
是公式=B2-ABS(C3-B2)
(mydbl
与下一个之间的avg
差值减去mydbl
以创建等距下限)。中的最后一个值dbl_f
是公式=B9+ABS(C9-B9)
(之间的差mydbl
和avg
相mydbl
加以创建等距上限)。两列中的其他值只是对该列的直接引用avg
。
Index mydbl avg dbl_i dbl_f
18 8.905 NA 6.7025 11.1075
19 13.31 11.1075 11.1075 14.5245
21 15.739 14.5245 14.5245 16.6415
22 17.544 16.6415 16.6415 18.299
23 19.054 18.299 18.299 19.7235
25 20.393 19.7235 19.7235 21.008
26 21.623 21.008 21.008 22.1935
29 22.764 22.1935 22.1935 23.3345
是的,这dbl_i
只是avg
列,但第一个值为=B2-abs(C3-B2)
. 并且该dbl_f
列与该列相同,avg
只是它向上移动了一个,最终值为=B9+abs(C9=B9)
. 最终,真正的问题似乎在于找到一种方法来重现 Excel 计算D2=B2-ABS(C3-B2)
和E9=B9+ABS(C9-B9)
.
有谁知道他们将如何在 R 中重现这些计算?我正在寻找一种在 R 中创建一个公式的方法,它可能相当于B2-ABS(C3-B2)
,但找不到,除非我创建一个矩阵。我必须创建一个矩阵吗?
谢谢你的时间。