分位数滚动平均

2024-04-24 23:33:34 发布

您现在位置:Python中文网/ 问答频道 /正文

roll = df.rolling(window=3, center=False).quantile(0.5)

我将[72,73,74,71,75,72,77,75,72,79,73,72]作为DF传递

我得到最小值74最大值77

这段代码是我用Python编写的

我想在R做这个

在R中有许多lib,比如caTools等等

runquantile(data[,2],3,probs = 0.5)(我试过这个)

但没有人能正常工作

请帮帮我

编辑。

基于OP注释,这里是数据和代码。这适用于me。你知道吗

DF <- c(72, 73, 74, 71, 75, 72, 77, 75, 72, 79, 73, 72)
runquantile(DF, 3, probs = 0.5)

Tags: 代码falsedfdatalibwindowcenterroll
1条回答
网友
1楼 · 发布于 2024-04-24 23:33:34

几乎没有例外,任何“滚动”给我的建议都是zoo包:

zoo::rollapply(DF, k=3, FUN=median) 
#  [1] 73 73 74 72 75 75 75 75 73 73
### this returns length(DF)-2*floor(width/2),
### problem if putting into a data.frame .. if so, then pad it:
zoo::rollapply(DF, 3, FUN=median, fill=NA)
#  [1] NA 73 73 74 72 75 75 75 75 73 73 NA

(从现在开始我会把所有的东西都垫起来。)

分位数:

zoo::rollapply(DF, width=3, quantile, probs=0.5, fill=NA)
#     50% 50% 50% 50% 50% 50% 50% 50% 50% 50%     
#  NA  73  73  74  72  75  75  75  75  73  73  NA 

具有多个probs的分位数返回矩阵:

zoo::rollapply(DF, width=3, quantile, probs=c(0.5,0.6), fill=NA)
#       50%  60%
#  [1,]  NA   NA
#  [2,]  73 73.2
#  [3,]  73 73.2
#  [4,]  74 74.2
#  [5,]  72 72.6
#  [6,]  75 75.4
#  [7,]  75 75.4
#  [8,]  75 75.4
#  [9,]  75 75.8
# [10,]  73 74.2
# [11,]  73 74.2
# [12,]  NA   NA

同样的道理,但我们可以编写一个函数(匿名或命名)来执行我们需要的任何操作:

zoo::rollapply(DF, width=3, FUN = function(x) quantile(x, probs=c(0.5,0.6)), fill=NA)

为清楚起见,您的陈述“我得到最小74最大77”可能会产生误导。我得到了全部数据:

In [15]: DF = pd.DataFrame({'B': [72,73,74,71,75,72,77,75,72,79,73,72]})

In [16]: DF.rolling(window=3, center=False).quantile(0.5)
Out[16]: 
       B
0    NaN
1    NaN
2   73.0
3   73.0
4   74.0
5   72.0
6   75.0
7   75.0
8   75.0
9   75.0
10  73.0
11  73.0

既然center=False,那么上面对zoo::rollapply的调用应该使用align=

zoo::rollapply(DF, width=3, quantile, probs=0.5, fill = NA, align="right")
#         50% 50% 50% 50% 50% 50% 50% 50% 50% 50% 
#  NA  NA  73  73  74  72  75  75  75  75  73  73 

50%标签是使用quantile的工件,可以安全地忽略和/或删除,如

zoo::rollapply(DF, width=3, quantile, probs=0.5, fill = NA, align="right", names=FALSE)
#  [1] NA NA 73 73 74 72 75 75 75 75 73 73

相关问题 更多 >