题
我想分配代表分位数的因素。因此,我需要它们是数字。这就是为什么我写下以下功能的原因,这基本上是我问题的答案:
qdum <- function(v,q){
qd = quantile(v,1:(q)/q)
v = as.data.frame(v)
v$b = 0
names(v) <- c("a","b")
i=1
for (i in 1:q){
if(i == 1)
v$b[ v$a < qd[1]] = 1
else
v$b[v$a > qd[i-1] & v$a <= qd[i]] = i
}
all = list(qd,v)
return(all)
}
您现在可能会笑:)。返回的列表包含一个可用于将每个观察值分配给其相应分位数的变量。我现在的问题是:有没有更好的方法(更多的“本地”或“核心”)?我知道QuantCut(来自GTools软件包),但至少有了我获得的参数,我最终只获得了那些没有人(至少对我来说)阈值。
值得赞赏的是,任何有助于变得更好的反馈!
解决方案
使用基本R,使用分位数来找出拆分,然后切割以将数字变量转换为离散:
qcut <- function(x, n) {
cut(x, quantile(x, seq(0, 1, length = n + 1)), labels = seq_len(n),
include.lowest = TRUE)
}
或者,如果您只想要这个数字:
qcut2 <- function(x, n) {
findInterval(x, quantile(x, seq(0, 1, length = n + 1)), all.inside = T)
}
其他提示
我不确定什么是量化,但我会做以下
qdum <- function(v, q) {
library(Hmisc)
quantilenum <- cut2(v, g=q)
levels(quantilenum) <- 1:q
cbind(v, quantilenum)
}
不隶属于 StackOverflow