【发布时间】:2019-12-18 12:22:31
【问题描述】:
我想计算 data.frame 中组的五分位数,例如:
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
【问题讨论】:
-
您的 mutate 语句已将列
z添加到您的 data.frame,因此无需将其分配给新列。相反,您可以使用df <- df %>% group_by(y) %>% mutate(z = ntile(x, 5)) %>% ungroup()。这不会解决您的问题,但我认为使用dplyr::mutate会起作用。可能您的代码正在使用的 mutate 版本来自plyr包。 -
无法重现您的示例。对我来说,您的代码按预期工作。也许尝试开始一个新的 R 会话。
标签: r dataframe dplyr group-by percentile