r语言 - 将 ntile() 与 group_by() 与 dplyr 一起使用



我想计算数据帧中组的五分位数,如下所示:

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

使用ntile()函数和dplyrgroup_by,我认为我可以像这里一样获得分组的五分位数。但是,正如我们从表中看到的那样,五分位数已相对于整个数据集进行了计算。在这种情况下,我想得到一个结果,其中每个五分位数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会话并尝试以下操作:

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)

最新更新