使用带有 group_by() 的 ntile() 和 dplyr

Use ntile() with group_by() with dplyr

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

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

使用 ntile() 函数和 dplyr 中的 group_by,我想我可以得到像这里这样的分组五分位数。然而,正如我们从 table 中看到的那样,五分位数是针对整个数据集计算的。在这种情况下,AB 的每个五分位数都有 10,我想得到一个结果。

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

确保开始一个新的 R-session 并试试这个:

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

此外,tabledplyr 替代方法是 count:

count(df, y, z)