[英]Calcing Rolling Min/Max Values on a time series
對於以下數據(tiblle 被命名為 eq_quotes)
Date High Low Close Rolling Max Rolling Min
12/16/2020 371.16 368.87 370.17 371.16 363.26
12/15/2020 369.59 365.92 369.59 371.05 363.26
12/14/2020 369.8 364.47 364.66 371.05 363.26
12/11/2020 366.74 363.26 366.3 371.05 359.17
12/10/2020 367.86 364.43 366.73 371.05 359.17
12/9/2020 371.05 365.95 366.85 371.05 359.17
12/8/2020 370.78 367.67 370.17 370.78 359.17
12/7/2020 369.62 367.72 369.09 369.85 354.87
12/4/2020 369.85 367.22 369.85 369.85 354.87
12/3/2020 368.19 365.5 366.69 368.19 354.15
12/2/2020 366.96 364.2 366.79 367.68 354.15
12/1/2020 367.68 364.93 366.02 367.68 354.15
11/30/2020 363.12 359.17 362.06 364.18 354.15
11/27/2020 364.18 362.58 363.67 364.18 354.15
11/25/2020 363.16 361.48 362.66 363.81 351.26
11/24/2020 363.81 359.29 363.22 363.81 351.26
11/23/2020 358.82 354.87 357.46 362.78 350.51
11/20/2020 357.72 355.25 355.33 364.38 350.51
11/19/2020 358.18 354.15 357.78 364.38 347.65
11/18/2020 361.5 356.24 356.28 364.38 347.65
我正在嘗試為日期列之后的三列數據計算單個滾動最小值/最大值。
window 的寬度將為 10,並從該行中的值開始。
最后兩列是數據中該行的數據應該是什么
我嘗試了多種方法來使用 RollMax 嘗試以下方法來計算數據:
rollmax(eq_quotes[,2:4],
k=10,
fill=NA,
align = "left")
==> 挑戰是創建了一個 3x # 行矩陣並且沒有為該行返回單個值 2) 在每一列上最多執行 3 次 Rollmax
max(rollmax(eq_quotes$High,
k=10,
fill=NA,
align = "left"),
rollmax(eq_quotes$Low,
k=10,
fill=NA,
align = "left"),
rollmax(eq_quotes$Close,
k=10,
fill=NA,
align = "left")
)
您可以嘗試以下方法:
library(zoo)
library(dplyr)
df %>%
mutate(across(High:Close, ~rollapply(.x, 10,
min, align = 'left', partial = TRUE), .names = '{col}_min'),
rolling_min = pmin(High_min, Low_min, Close_min),
across(High:Close, ~rollapply(.x, 10,
max, align = 'left', partial = TRUE), .names = '{col}_max'),
rolling_max = pmax(High_max, Low_max, Close_max)) %>%
select(Date:Close, rolling_min, rolling_max)
這將返回:
# Date High Low Close rolling_min rolling_max
#1 12/16/2020 371.16 368.87 370.17 363.26 371.16
#2 12/15/2020 369.59 365.92 369.59 363.26 371.05
#3 12/14/2020 369.80 364.47 364.66 363.26 371.05
#4 12/11/2020 366.74 363.26 366.30 359.17 371.05
#5 12/10/2020 367.86 364.43 366.73 359.17 371.05
#6 12/9/2020 371.05 365.95 366.85 359.17 371.05
#7 12/8/2020 370.78 367.67 370.17 359.17 370.78
#8 12/7/2020 369.62 367.72 369.09 354.87 369.85
#9 12/4/2020 369.85 367.22 369.85 354.87 369.85
#10 12/3/2020 368.19 365.50 366.69 354.15 368.19
#11 12/2/2020 366.96 364.20 366.79 354.15 367.68
#12 12/1/2020 367.68 364.93 366.02 354.15 367.68
#13 11/30/2020 363.12 359.17 362.06 354.15 364.18
#14 11/27/2020 364.18 362.58 363.67 354.15 364.18
#15 11/25/2020 363.16 361.48 362.66 354.15 363.81
#16 11/24/2020 363.81 359.29 363.22 354.15 363.81
#17 11/23/2020 358.82 354.87 357.46 354.15 361.50
#18 11/20/2020 357.72 355.25 355.33 354.15 361.50
#19 11/19/2020 358.18 354.15 357.78 354.15 361.50
#20 11/18/2020 361.50 356.24 356.28 356.24 361.50
對於 3 列,我們計算滾動最小值和最大值,然后使用pmin
和pmax
我們為每一行收集一個最小值和最大值。
由於最低價和收盤價不能高於最高價,我們只需要取最高價列的滾動最大值,類似地取最低價的滾動最小值。 另請注意,對於任何數字向量 x,min(x) = -max(-x)。
library(dplyr)
library(zoo)
eq_quotes %>%
mutate(Roll_Max = rollmax(High, 10, align = "left", fill = NA),
Roll_Min = -rollmax(-Low, 10, align = "left", fill = NA))
Lines <- "
Date High Low Close Rolling_Max Rolling_Min
12/16/2020 371.16 368.87 370.17 371.16 363.26
12/15/2020 369.59 365.92 369.59 371.05 363.26
12/14/2020 369.8 364.47 364.66 371.05 363.26
12/11/2020 366.74 363.26 366.3 371.05 359.17
12/10/2020 367.86 364.43 366.73 371.05 359.17
12/9/2020 371.05 365.95 366.85 371.05 359.17
12/8/2020 370.78 367.67 370.17 370.78 359.17
12/7/2020 369.62 367.72 369.09 369.85 354.87
12/4/2020 369.85 367.22 369.85 369.85 354.87
12/3/2020 368.19 365.5 366.69 368.19 354.15
12/2/2020 366.96 364.2 366.79 367.68 354.15
12/1/2020 367.68 364.93 366.02 367.68 354.15
11/30/2020 363.12 359.17 362.06 364.18 354.15
11/27/2020 364.18 362.58 363.67 364.18 354.15
11/25/2020 363.16 361.48 362.66 363.81 351.26
11/24/2020 363.81 359.29 363.22 363.81 351.26
11/23/2020 358.82 354.87 357.46 362.78 350.51
11/20/2020 357.72 355.25 355.33 364.38 350.51
11/19/2020 358.18 354.15 357.78 364.38 347.65
11/18/2020 361.5 356.24 356.28 364.38 347.65"
eq_quotes <- read.table(text = Lines, header = TRUE)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.