gpt4 book ai didi

r - R中的等频离散化

转载 作者:行者123 更新时间:2023-12-04 16:32:27 24 4
gpt4 key购买 nike

我无法在 R 中找到执行等频离散化的函数。我偶然发现了 'infotheo' 包,但经过一些测试后,我发现该算法已损坏。 CRAN 似乎不再支持“dprep”。

编辑 :

为清楚起见,我不需要将 bin 之间的值分开。我真的想要相同的频率,如果一个值最终出现在两个 bin 中并不重要。例如:

c(1,3,2,1,2,2) 

应该给一个垃圾箱 c(1,1,2)和一个 c(2,2,3)

最佳答案

编辑:鉴于你的真正目标,你为什么不做(更正):

 EqualFreq2 <- function(x,n){
nx <- length(x)
nrepl <- floor(nx/n)
nplus <- sample(1:n,nx - nrepl*n)
nrep <- rep(nrepl,n)
nrep[nplus] <- nrepl+1
x[order(x)] <- rep(seq.int(n),nrep)
x
}

这将返回一个带有指示符的向量。但由于某些值可能存在于两个 bin 中,因此您不可能定义 bin 限制。但你可以这样做:
x <- rpois(50,5)
y <- EqualFreq2(x,15)
table(y)
split(x,y)

原答案:

您可以轻松使用 cut()为了这 :
EqualFreq <-function(x,n,include.lowest=TRUE,...){
nx <- length(x)
id <- round(c(1,(1:(n-1))*(nx/n),nx))

breaks <- sort(x)[id]
if( sum(duplicated(breaks))>0 stop("n is too large.")

cut(x,breaks,include.lowest=include.lowest,...)

}

这使 :
set.seed(12345)
x <- rnorm(50)
table(EqualFreq(x,5))

[-2.38,-0.886] (-0.886,-0.116] (-0.116,0.586] (0.586,0.937] (0.937,2.2]
10 10 10 10 10

x <- rpois(50,5)
table(EqualFreq(x,5))

[1,3] (3,5] (5,6] (6,7] (7,11]
10 13 11 6 10

如您所见,对于离散数据,在大多数情况下,最佳等分合并是不可能的,但这种方法为您提供了可能的最佳合并。

关于r - R中的等频离散化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5731116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com