我想计算一个数据框中每个分组的五分位数,例如这样的数据框:
df <- data.frame(x=1:100, y=c(rep("A", 50), rep("B", 50)))
使用dplyr
的ntile()
函数和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
z
,因此不必将其分配给新列。相反,您可以执行df <- df %>% group_by(y) %>% mutate(z = ntile(x, 5)) %>% ungroup()
。这不会解决您的问题,但我认为使用dplyr :: mutate
会起作用。您的代码正在使用的变异版本可能来自plyr
包。 - Bas