在时间序列上滚动十分位数排名,无循环或使用;“运行”;来自pkg:gregmisc
我一直在使用gregmisc库进行滚动小数排名 假设我有1000个连续值的向量“X”,我用250的回望窗口应用我的函数(这就是我使用的) 我目前的职能如下: 前250条记录的值将介于1和10之间。 然后,下一条记录251将由c(2:251)中的值确定,然后为c(3:252)重复,以此类推 虽然它比循环更快,但使用gregmisc的“running”函数作为我的十分位排序函数的性能还有很多需要改进的地方 我一直在努力通过在整个时间序列上操作来加速我的功能,基本上是创建当时我需要的信息列,但我没有像其他人那样为这个问题找到类似的解决方案。当我使用这种方法时,我将处理时间减少了95% 矩阵可能工作得更快,但我还没有看到它做得比我的跑步版本好 有什么想法吗 谢谢在时间序列上滚动十分位数排名,无循环或使用;“运行”;来自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”函数作为我的十分位排序函数的性能还有很多需要改进的地方 我一直在努力通过在整个时间序列上操作来加速我的功能,基本上是创建当时我需要的信息列,但我没有像
下面是我正在使用的代码: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