将 ntile() 与 group_by() 与 dplyr 一起使用

Mar*_*ayo 1 group-by r percentile dataframe dplyr

我想计算 data.frame 中的组的五分位数,例如:

df <- data.frame(x=1:100, y=c(rep("A", 50), rep("B", 50)))
Run Code Online (Sandbox Code Playgroud)

使用ntile()函数和group_byfrom dplyr,我想我可以得到分组的五分位数,比如这里。但是,从表中可以看出,五分位数是针对整个数据集计算的。我希望得到的结果,其中有10每个五分之一的AB在这种情况下。

df$z <- df %>% group_by(y) %>% mutate(z = ntile(x, 5)) %>% pull(z)

table(df$y, df$z)

     1  2  3  4  5
  A 20 20 10  0  0
  B  0  0 10 20 20
Run Code Online (Sandbox Code Playgroud)

Cet*_*ttt 5

确保开始一个新的 R 会话并尝试以下操作:

library(dplyr)
df <- data.frame(x=1:100, y=c(rep("A", 50), rep("B", 50))) %>% 
   group_by(y) %>% mutate(z = ntile(x, 5))

table(df$y, df$z)
     1  2  3  4  5
  A 10 10 10 10 10
  B 10 10 10 10 10
Run Code Online (Sandbox Code Playgroud)

此外,dplyr另一种方法tablecount

count(df, y, z)
Run Code Online (Sandbox Code Playgroud)