分组 table 个百分位数
Grouped table of percentiles
我需要计算哪个值代表组内的 5%、34%、50%、67% 和 95%(在单独的列中)。预期输出为
5% 34% 50% 67% 95%
A 4 6 8 12 30
B 1 2 3 4 10
每个组的整数值。
下面的代码显示了我目前所拥有的(但使用生成的数据):
library(dplyr)
library(tidyr)
data.frame(group=sample(LETTERS[1:5],100,TRUE),values=rnorm(100)) %>%
group_by(group) %>%
mutate(perc_int=findInterval(values,
quantile(values, probs=c(0.05,0.34,0.5,0.67,0.95)))) %>%
pivot_wider(names_from = perc_int,values_from = values)
我使用这个例子得到了六个列,但我不确定为什么。
此外,列中填充的是向量而不是单个值。我如何获得代表值向量中百分位数的单个值?
您可以在列表中获取 quantile
数据,然后使用 unnest_wider
来创建单独的列。
library(dplyr)
set.seed(123)
data.frame(group=sample(LETTERS[1:5],100,TRUE),values=rnorm(100)) %>%
group_by(group) %>%
summarise(perc_int= list(quantile(values, probs=c(0.05,0.34,0.5,0.67,0.95)))) %>%
tidyr::unnest_wider(perc_int)
# A tibble: 5 x 6
# group `5%` `34%` `50%` `67%` `95%`
# <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 A -2.40 -0.580 -0.0887 0.371 1.38
#2 B -1.83 -0.200 0.0848 0.546 1.78
#3 C -0.947 -0.148 0.184 0.789 1.81
#4 D -0.992 -0.275 -0.0193 0.274 1.82
#5 E -1.65 -0.457 -0.0422 0.540 1.66
以下应该有效。
library(dplyr)
data.frame(group=sample(LETTERS[1:5],100,TRUE),values=rnorm(100)) %>%
group_by(group) %>% summarise(`5 %` = quantile(values,0.05),
`34 %` = quantile(values,0.34),
`50 %` = quantile(values,0.5),
`67 %` = quantile(values,0.67),
`95 %` = quantile(values,0.95))
我需要计算哪个值代表组内的 5%、34%、50%、67% 和 95%(在单独的列中)。预期输出为
5% 34% 50% 67% 95%
A 4 6 8 12 30
B 1 2 3 4 10
每个组的整数值。
下面的代码显示了我目前所拥有的(但使用生成的数据):
library(dplyr)
library(tidyr)
data.frame(group=sample(LETTERS[1:5],100,TRUE),values=rnorm(100)) %>%
group_by(group) %>%
mutate(perc_int=findInterval(values,
quantile(values, probs=c(0.05,0.34,0.5,0.67,0.95)))) %>%
pivot_wider(names_from = perc_int,values_from = values)
我使用这个例子得到了六个列,但我不确定为什么。
此外,列中填充的是向量而不是单个值。我如何获得代表值向量中百分位数的单个值?
您可以在列表中获取 quantile
数据,然后使用 unnest_wider
来创建单独的列。
library(dplyr)
set.seed(123)
data.frame(group=sample(LETTERS[1:5],100,TRUE),values=rnorm(100)) %>%
group_by(group) %>%
summarise(perc_int= list(quantile(values, probs=c(0.05,0.34,0.5,0.67,0.95)))) %>%
tidyr::unnest_wider(perc_int)
# A tibble: 5 x 6
# group `5%` `34%` `50%` `67%` `95%`
# <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 A -2.40 -0.580 -0.0887 0.371 1.38
#2 B -1.83 -0.200 0.0848 0.546 1.78
#3 C -0.947 -0.148 0.184 0.789 1.81
#4 D -0.992 -0.275 -0.0193 0.274 1.82
#5 E -1.65 -0.457 -0.0422 0.540 1.66
以下应该有效。
library(dplyr)
data.frame(group=sample(LETTERS[1:5],100,TRUE),values=rnorm(100)) %>%
group_by(group) %>% summarise(`5 %` = quantile(values,0.05),
`34 %` = quantile(values,0.34),
`50 %` = quantile(values,0.5),
`67 %` = quantile(values,0.67),
`95 %` = quantile(values,0.95))