在数据框的多个列上进行分位数排序并变异结果

时间:2018-07-03 20:33:17

标签: r dataframe dplyr quantile mutate

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

    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 个答案:

答案 0 :(得分:3)

您可以尝试使用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

数据:

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)