我想计算数据帧中组的五分位数,如下所示:
df <- data.frame(x=1:100, y=c(rep("A", 50), rep("B", 50)))
使用ntile()
函数和dplyr
的group_by
,我认为我可以像这里一样获得分组的五分位数。但是,正如我们从表中看到的那样,五分位数已相对于整个数据集进行了计算。在这种情况下,我想得到一个结果,其中每个五分位数A
和B
都有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
此外,table
的dplyr
替代方案是count
:
count(df, y, z)