代码之家  ›  专栏  ›  技术社区  ›  Matt Bannert

有没有更好的方法在R中创建分位数“dummies”因子?

  •  8
  • Matt Bannert  · 技术社区  · 14 年前

    这就是为什么我编写了以下函数,这基本上是我的问题的答案:

    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)
    
        }
    

    你现在可以笑了:)。

    任何有助于改善的反馈都是值得赞赏的!

    2 回复  |  直到 6 年前
        1
  •  13
  •   Collin    14 年前

    对于基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)
    }
    
        2
  •  3
  •   Sameer    14 年前

    我不知道quantcut是什么,但我会做以下事情

    qdum <- function(v, q) {
     library(Hmisc)
     quantilenum <- cut2(v, g=q)
     levels(quantilenum) <- 1:q
     cbind(v, quantilenum)
    }