在数据框的多列上进行分位数排名并改变结果
quantile ranking on multiple columns of a data frame and mutate the results
我有一个如下所示的数据框:
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
但我想在相应列之后更改所有列的分位数。
有谁知道如何在 r 中使用带有分位数和变异函数的 dplyr 包来做到这一点?
谢谢!
您可以尝试使用 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)
我有一个如下所示的数据框:
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
但我想在相应列之后更改所有列的分位数。 有谁知道如何在 r 中使用带有分位数和变异函数的 dplyr 包来做到这一点?
谢谢!
您可以尝试使用 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)