r - 在 R 中创建百分位类别

标签 r percentile

我有以下数据:

len = 1000
vint1 = vint1=sample(1:150,len,replace=TRUE)
vch1=sample(LETTERS[1:5],len,replace=TRUE)
vbin1=sample(letters[1:2],len,replace=TRUE)
mydf = data.frame(vint1, vch1, vbin1)

但是我必须创建另一列“类别”,其中应根据以下规则包含条目:

'N' if < 90th percentile 
'cat1' if >=90th and <95th percentile
'cat2' if >=95th and <99th percentile
'cat3' if >99th percentile

始终检查 vch1 和 vbin1 的百分位数。

我可以通过以下代码确定该组 vch1 和 vch2 的 Vint1 值是否 > 90%:

with(mydf, ave(vint1, vch1, vbin1, FUN=function(x) x>quantile(x,0.9)))

但是我怎样才能分类呢?

编辑:

我尝试了以下代码。想确认一下是否可以或者有没有更好的方法:

with(mydf, ave(vint1, vch1, vbin1, FUN=function(x) 
    ifelse(x<quantile(x,0.9), 'N',
    ifelse(x<quantile(x,0.95),'cat1',
    ifelse(x<(quantile(x,0.99)),'cat2','cat3'
    )))
    )
)

这是来自以下的后续问题:Categorize dataframe by percentile in R

最佳答案

这可能会有所帮助。使用 dplyr 中的 group_byntile 以及您的 ifelse 语句,我得出了以下结果。

library(dplyr)

group_by(mydf, vch1, vbin1) %>%
mutate(check = ntile(vint1, 100),
       out = ifelse(check > 99, "cat3",
                 ifelse(between(check, 95, 99), "cat2",
                    ifelse(between(check, 90, 95), "cat1", "N")))) %>%
ungroup()

# A part of the outcome
#   vint1 vch1 vbin1 check  out
#1    138    C     b    88    N
#2     66    B     a    39    N
#3     24    D     a    16    N
#4    141    B     a    90 cat1
#5     27    C     a    13    N
#6     29    C     a    16    N
#7     11    D     b     4    N
#8     24    B     b    21    N
#9     72    E     a    46    N
#10    25    C     b    15    N

想法

transform(mydf,
          check = ave(vint1, vch1, vbin1, FUN=function(x){
                       ifelse(x<quantile(x,0.9), 'N',
                       ifelse(x<quantile(x,0.95),'cat1',
                       ifelse(x<(quantile(x,0.99)),'cat2','cat3'
                    )))  
                  })
          )

#  vint1 vch1 vbin1 check
#1    90    D     b     N
#2   136    C     b  cat1
#3    55    B     a     N
#4    56    B     b     N
#5    56    D     a     N
#6   100    A     b     N

关于r - 在 R 中创建百分位类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27340090/

相关文章:

r - 如何解析自定义格式的文件 R

r - 如何在ggplot2中制作具有锐利过渡的色标

r - 如何在 bookdown 定理或示例环境中使用内联 R 代码

python - 是否可以在给定百分位数而不是原始输入的情况下绘制 matplotlib 箱线图?

algorithm - 如何计算高于 Int 列表平均值十分之一的值的百分比

r - 如何创建包含星期几的向量?

r - 使用 Rcpp 和 openMP 从截断正态分布快速采样

r - 如何为因子变量的每个级别应用函数?

java - 给定数百万个数字流,如何近似第 90 个百分位数

python - 如何获取 Pandas 数据框中一行的百分位数?