Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 时间序列上的煅烧轧制最小/最大值_R - Fatal编程技术网

R 时间序列上的煅烧轧制最小/最大值

R 时间序列上的煅烧轧制最小/最大值,r,R,对于以下数据(tiblle命名为eq_quotes) 我试图为日期列之后的三列数据计算单个滚动最小值/最大值。 窗口的宽度为10,并以该行中的值开始 最后两列是数据中该行的数据应该是什么 我尝试了多种使用RollMax计算数据的方法,尝试了以下方法: Rollmax指向我要用作输入的3列 类似(删除代码): ==>挑战在于创建了一个3x行矩阵,并且没有为该行返回一个值 2) 每个列上最多执行3次Rollmax max(rollmax(eq_quotes$High,

对于以下数据(tiblle命名为eq_quotes)

我试图为日期列之后的三列数据计算单个滚动最小值/最大值。
窗口的宽度为10,并以该行中的值开始

最后两列是数据中该行的数据应该是什么

我尝试了多种使用RollMax计算数据的方法,尝试了以下方法:

  • Rollmax指向我要用作输入的3列 类似(删除代码):
  • ==>挑战在于创建了一个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")
                           
                        )
    
  • 尝试将数据分为10行子表,但仍然遇到如何计算3列数据的最大/最小值的挑战

  • 您可以尝试以下操作:

    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)