【问题标题】:R cran - non overlapping decilesR cran - 非重叠十分位数
【发布时间】:2015-11-20 22:11:09
【问题描述】:

我需要将四分位数粘贴到表格中,但它必须避免重叠值。一个例子是:

table<-data.frame(num1=c(0,1,1,2,2,3,3,3,3,6), num2=seq(20,30,len=10))

如果我使用来自 dplyr 的 ntile:

library(dplyr)
table$cuartil<-ntile(table$num1, 4)

我得到一个重叠的结果:

> table  
   num1     num2 cuartil
     0 20.00000       1
     1 21.11111       1
     1 22.22222       1
     2 23.33333       2
     2 24.44444       2
     3 25.55556       3
     3 26.66667       3
     3 27.77778       3
     3 28.88889       4
     6 30.00000       4

我需要的是:

 num1   num2      cuartil
    0   20          1
    1   21.11111    1
    1   22.22222    1
    2   23.33333    2
    2   24.44444    2
    3   25.55556    3
    3   26.66667    3
    3   27.77778    3
    3   28.88889    3
    6   30          4

所以值 3 仅在一组中,而不是在两组(3 和 4)中。 是否有任何其他函数可以计算百分位数,但考虑不要像 ntile 那样重叠值?

【问题讨论】:

  • @akrun。它被复制了。我没看到。
  • @akrun,对不起。你是对的。我以为我会污染网站。
  • 感谢您的回复。此外,通过谷歌搜索很容易发现欺骗问题。如果您可以取消删除问题,那就太好了。

标签: r overlap percentile


【解决方案1】:

您可以使用quantile() 编写自己的函数:

quartile <- function(x) {
  qrt <- quantile(x)
  y <- x
  y[x<=qrt[5]] <- 4
  y[x<=qrt[4]] <- 3
  y[x<=qrt[3]] <- 2
  y[x<=qrt[2]] <- 1
  y[x<=qrt[1]] <- 0
  return(y)
}

table$cuartil <- quartile(table$num1)

【讨论】:

    【解决方案2】:

    使用 Sam 的函数,通用函数可能是:

    quantG <- function(x, m) 
        {library(plyr)
        qrt <- quantile(x,probs=seq(0, 1, 1/m) )
        y <- x
        for (i in (1:5) ) {y[x<=qrt[m+2-i]] <- m+1-i}
        return(y)}
    

    还有:

    table$cuartil <- quantG (table$num1,4)
    

    得到相同的结果。

    【讨论】:

      猜你喜欢
      • 2016-10-06
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 1970-01-01
      • 2020-10-08
      • 2013-10-28
      相关资源
      最近更新 更多