Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
在时间序列上滚动十分位数排名,无循环或使用;“运行”;来自pkg:gregmisc_R_Time Series_Ranking - Fatal编程技术网

在时间序列上滚动十分位数排名,无循环或使用;“运行”;来自pkg:gregmisc

在时间序列上滚动十分位数排名,无循环或使用;“运行”;来自pkg:gregmisc,r,time-series,ranking,R,Time Series,Ranking,我一直在使用gregmisc库进行滚动小数排名 假设我有1000个连续值的向量“X”,我用250的回望窗口应用我的函数(这就是我使用的) 我目前的职能如下: 前250条记录的值将介于1和10之间。 然后,下一条记录251将由c(2:251)中的值确定,然后为c(3:252)重复,以此类推 虽然它比循环更快,但使用gregmisc的“running”函数作为我的十分位排序函数的性能还有很多需要改进的地方 我一直在努力通过在整个时间序列上操作来加速我的功能,基本上是创建当时我需要的信息列,但我没有像

我一直在使用gregmisc库进行滚动小数排名

假设我有1000个连续值的向量“X”,我用250的回望窗口应用我的函数(这就是我使用的)

我目前的职能如下: 前250条记录的值将介于1和10之间。 然后,下一条记录251将由c(2:251)中的值确定,然后为c(3:252)重复,以此类推

虽然它比循环更快,但使用gregmisc的“running”函数作为我的十分位排序函数的性能还有很多需要改进的地方

我一直在努力通过在整个时间序列上操作来加速我的功能,基本上是创建当时我需要的信息列,但我没有像其他人那样为这个问题找到类似的解决方案。当我使用这种方法时,我将处理时间减少了95%

矩阵可能工作得更快,但我还没有看到它做得比我的跑步版本好

有什么想法吗

谢谢


下面是我正在使用的代码:1个核心函数,然后是一个使用Greg misc滚动的函数:

F_getDecileVal <- function( x, deciles=0.1) {
    len<-length(x)
    y <- array(0,dim=len)   
    deciles <- seq(0,1,deciles)
    decileBounds <- quantile( x ,deciles, na.rm=TRUE)
        lendecile <- length(decileBounds)                  
        for( i in 2 : lendecile) {
            y[ which( x <= decileBounds[[i]] & x >= decileBounds[[i-1]] ) ] <- (i - 1)
        }   
    #Reverse Order so top decile has largest values
    dec6 <- which(y==6); dec7 <- which(y==7); dec8 <- which(y==8); dec9 <- which(y==9); dec10 <-which(y==10);
    dec1 <- which(y==1); dec2 <- which(y==2); dec3 <- which(y==3); dec4 <- which(y==4); dec5 <-which(y==5);
    y[dec1]<-10; y[dec2]<-9; y[dec3]<-8; y[dec4]<-7; y[dec5]<-6; y[dec6]<-5; y[dec7]<-4; y[dec8]<-3; y[dec8]<-3; y[dec9]<-2; y[dec10]<-1;

    return(y)
}

F_getDecileVal如果您可以接受使用“decile”的版本,而该版本不是R的分位数函数中默认使用的版本(但这是我认为type=6的可能选择之一),那么您可能只需使用
排序
并提取第26、51、76位。。。根据您是否还想要最小值和最大值,而仅仅是内部十分位“铰链”,将其等分为第226项或第250项。zoo软件包中的
rollapply
函数是为滚动函数应用而设计的,我认为从长远来看,它可能比
gregmisc::running
更有用,因为它是时间序列函数套件的一部分。这个更简单的示例只返回一个简单集合的min、max和median:

x <- 1:1000
require(zoo)
rollapply(x[1:300], 250, function(x) sort(x)[ c(1, 125, 250) ] )
      [,1] [,2] [,3]
 [1,]    1  125  250
 [2,]    2  126  251
 [3,]    3  127  252
 [4,]    4  128  253
 [5,]    5  129  254
 [6,]    6  130  255
 [7,]    7  131  256
 snipped the rest of the 50 lines of the output matrix.

x如果您可以接受使用“十分位数”的版本,而该版本不是R的分位数函数中默认使用的版本(但这是我认为type=6的可能选择之一),那么您可能只需要使用
排序
并提取第26、51、76位。。。根据您是否还想要最小值和最大值,而仅仅是内部十分位“铰链”,将其等分为第226项或第250项。zoo软件包中的
rollapply
函数是为滚动函数应用而设计的,我认为从长远来看,它可能比
gregmisc::running
更有用,因为它是时间序列函数套件的一部分。这个更简单的示例只返回一个简单集合的min、max和median:

x <- 1:1000
require(zoo)
rollapply(x[1:300], 250, function(x) sort(x)[ c(1, 125, 250) ] )
      [,1] [,2] [,3]
 [1,]    1  125  250
 [2,]    2  126  251
 [3,]    3  127  252
 [4,]    4  128  253
 [5,]    5  129  254
 [6,]    6  130  255
 [7,]    7  131  256
 snipped the rest of the 50 lines of the output matrix.

x如果您可以接受使用“十分位数”的版本,而该版本不是R的分位数函数中默认使用的版本(但这是我认为type=6的可能选择之一),那么您可能只需要使用
排序
并提取第26、51、76位。。。根据您是否还想要最小值和最大值,而仅仅是内部十分位“铰链”,将其等分为第226项或第250项。zoo软件包中的
rollapply
函数是为滚动函数应用而设计的,我认为从长远来看,它可能比
gregmisc::running
更有用,因为它是时间序列函数套件的一部分。这个更简单的示例只返回一个简单集合的min、max和median:

x <- 1:1000
require(zoo)
rollapply(x[1:300], 250, function(x) sort(x)[ c(1, 125, 250) ] )
      [,1] [,2] [,3]
 [1,]    1  125  250
 [2,]    2  126  251
 [3,]    3  127  252
 [4,]    4  128  253
 [5,]    5  129  254
 [6,]    6  130  255
 [7,]    7  131  256
 snipped the rest of the 50 lines of the output matrix.

x如果您可以接受使用“十分位数”的版本,而该版本不是R的分位数函数中默认使用的版本(但这是我认为type=6的可能选择之一),那么您可能只需要使用
排序
并提取第26、51、76位。。。根据您是否还想要最小值和最大值,而仅仅是内部十分位“铰链”,将其等分为第226项或第250项。zoo软件包中的
rollapply
函数是为滚动函数应用而设计的,我认为从长远来看,它可能比
gregmisc::running
更有用,因为它是时间序列函数套件的一部分。这个更简单的示例只返回一个简单集合的min、max和median:

x <- 1:1000
require(zoo)
rollapply(x[1:300], 250, function(x) sort(x)[ c(1, 125, 250) ] )
      [,1] [,2] [,3]
 [1,]    1  125  250
 [2,]    2  126  251
 [3,]    3  127  252
 [4,]    4  128  253
 [5,]    5  129  254
 [6,]    6  130  255
 [7,]    7  131  256
 snipped the rest of the 50 lines of the output matrix.


x如果您提供一个小示例,您当前正在使用的函数以及计时,这将非常有用,因为您希望加快它的速度。抱歉,你说得太对了。补充。如果您提供一个小示例,您当前使用的函数以及计时,这将非常有用,因为您希望加快它的速度。抱歉,你说得太对了。补充。如果您提供一个小示例,您当前使用的函数以及计时,这将非常有用,因为您希望加快它的速度。抱歉,你说得太对了。补充。如果您提供一个小示例,您当前使用的函数以及计时,这将非常有用,因为您希望加快它的速度。抱歉,你说得太对了。补充。我能不能也看到第一部分?抱歉,但我不确定我是否理解十进制类型=6部分。谢谢,小数点可以是最低10%中的最后一个值,也可以是下一个值,或者是最低10%和下一个值之间的某个插值。读取分位数以查看分位数“类型”的完整列表。我的方法仍然需要排序(对于大型数据集,这在计算上是相当昂贵的),但不需要插值。我会检查一下。再次感谢。我喜欢排序建议,因为使用“排序”方法比我已有的方法花费更多的时间。我想知道如何加快速度,或者与滚动相比,是否有一种更“全局”的方法。你可以保留一个十分之一分割点的运行向量,然后只需要在一个1/10的值段内进行替换。您只需要在其中一个边界上出现命中时进行排序。否则,您只需要在每次迭代中替换一个值。我能看到第一部分吗?抱歉,但我不确定我是否理解十进制类型=6部分。Tha