使用带有 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 中看到的那样,五分位数是针对整个数据集计算的。在这种情况下,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-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
此外,table
的 dplyr
替代方法是 count
:
count(df, y, z)
我想计算 data.frame 中组的五分位数,如下所示:
df <- data.frame(x=1:100, y=c(rep("A", 50), rep("B", 50)))
使用 ntile()
函数和 dplyr
中的 group_by
,我想我可以得到像这里这样的分组五分位数。然而,正如我们从 table 中看到的那样,五分位数是针对整个数据集计算的。在这种情况下,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-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
此外,table
的 dplyr
替代方法是 count
:
count(df, y, z)