首页 文章

分位数在数据帧的多列上排名并改变结果

提问于
浏览
1

我有一个数据框,如下所示:

AA   BB  CC   DD
aa  2.6 -0.3 2.5 2.3
bb -0.3  1.2 2.1 0.8
cc  0.5 -0.4 0.4 0.4

我想基于每个列对此数据框执行分位数排名,并将每列的排名变为数据框 . 我想用dplyr包 . 我可以为一列生成以下数据框:

AA   BB  CC   DD quantile
 aa  2.6 -0.3 2.5 2.3        4
 bb -0.3  1.2 2.1 0.8        1
 cc  0.5 -0.4 0.4 0.4        2

但我想在相应的列之后立即改变所有列的分位数 . 有没有人知道我怎么能用带有分位数和变异函数的dplyr包在r中做到这一点?

谢谢!

1 回答

  • 2

    您可以尝试使用 dplyr::mutate_all 在所有列上应用 quantile 然后 cut

    library(dplyr)
    
    df %>% mutate_all(funs(quant = 
                           as.integer(cut(., quantile(.), include.lowest = TRUE))))
    
    #     AA   BB  CC  DD AA_quant BB_quant CC_quant DD_quant
    # 1  2.6 -0.3 2.5 2.3        4        2        4        4
    # 2 -0.3  1.2 2.1 0.8        1        4        2        2
    # 3  0.5 -0.4 0.4 0.4        2        1        1        1
    

    Data:

    df <- read.table(text="
    AA   BB  CC   DD
    aa  2.6 -0.3 2.5 2.3
    bb -0.3  1.2 2.1 0.8
    cc  0.5 -0.4 0.4 0.4",
    header = TRUE)
    

相关问题