R 时间序列上的煅烧轧制最小/最大值
对于以下数据(tiblle命名为eq_quotes) 我试图为日期列之后的三列数据计算单个滚动最小值/最大值。R 时间序列上的煅烧轧制最小/最大值,r,R,对于以下数据(tiblle命名为eq_quotes) 我试图为日期列之后的三列数据计算单个滚动最小值/最大值。 窗口的宽度为10,并以该行中的值开始 最后两列是数据中该行的数据应该是什么 我尝试了多种使用RollMax计算数据的方法,尝试了以下方法: Rollmax指向我要用作输入的3列 类似(删除代码): ==>挑战在于创建了一个3x行矩阵,并且没有为该行返回一个值 2) 每个列上最多执行3次Rollmax max(rollmax(eq_quotes$High,
窗口的宽度为10,并以该行中的值开始 最后两列是数据中该行的数据应该是什么 我尝试了多种使用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
为每行收集一个最小值和最大值。您可以尝试以下操作:
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,最小值(x)=-max(-x)
注
行由于低位和收盘不能高于高位,我们只需要取高位栏的滚动最大值,同样地,取低位栏的滚动最小值。还请注意,对于任何数值向量x,最小值(x)=-max(-x)
注
行,这将教会我在执行解决方案之前思考我正在尝试做什么,因为您的逻辑使这非常简单。谢谢这将教会我在执行一个解决方案之前思考我正在尝试做什么,因为你的逻辑使这非常简单。谢谢谢谢Ronak。当我第一次看到你的解决方案时,我就像“yikes”,但在了解了Cross是如何工作的(每天在这里学习新的东西)之后,我明白了它是如何工作的。谢谢Ronak。当我第一次看到你的解决方案时,我就像“yikes”,但在了解了Cross是如何工作的(每天在这里学习新的东西)之后,我明白了它是如何工作的。
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)