用r中的平均值、中位数、范围和数量进行总结



我目前正在使用R处理帕尔默企鹅数据集,并希望总结结合平均值,中位数,范围和数量的数据,按性别分组。

我目前的解决方案是从汇总数据中分离出定量数据。有没有一种方法可以一次性完成。如果不是,我如何组合这些数据集。组量化目前是长格式,我不确定如何组合它们。

group_summary <- penguins %>% group_by(sex) %>% summarize(mean = mean(bill_length_mm, 
na.rm = TRUE), meadian = median(bill_length_mm, na.rm = TRUE), range = 
max(bill_length_mm, na.rm = TRUE) - min(bill_length_mm, na.rm = TRUE))
group_quant <- penguins %>% group_by(sex) %>% summarize(quantile(bill_length_mm, 
probs =seq(.1, 1, by = .1), na.rm =TRUE, .groups = 'drop'))

我有以下解决方案,但它从性别下降NA值,我不知道为什么。

group_summary <- do.call(data.frame,aggregate(bill_length_mm ~ sex, penguins, 
function(x) c(mean = mean(x, na.rm = TRUE), median = median(x, na.rm = TRUE), range = 
max(x, na.rm = TRUE) - min(x, na.rm = TRUE), quantile(x, probs = seq(.1, 1, by = .1), 
na.rm = TRUE, .groups = 'drop'))))

您可以将分位数保存在列表中,然后使用unnest_wider从它们创建新列。为了计算range,我用diff(range(...))代替max(...) - min(...)。它们都很好,但我把它包括进来是为了展示另一种选择。

library(palmerpenguins)
library(dplyr)
library(tidyr)
penguins %>% 
group_by(sex) %>% 
summarize(mean = mean(bill_length_mm, na.rm = TRUE), 
median = median(bill_length_mm, na.rm = TRUE), 
range = diff(range(bill_length_mm, na.rm = TRUE)), 
quantile = list(quantile(bill_length_mm, probs = seq(.1, 1, by = .1), na.rm = TRUE))) %>%
unnest_wider(quantile)
#   sex     mean median range `10%` `20%` `30%` `40%` `50%` `60%` `70%` `80%` `90%` `100%`
#  <fct>  <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
#1 female  42.1   42.8  25.9  35.8  36.7  38.2  40    42.8  45.1  45.7  46.5  47.5   58  
#2 male    45.9   46.8  25    38.8  40.5  41.3  43.2  46.8  49.0  50.0  50.8  51.9   59.6
#3 NA      41.3   42    13.2  36.8  37.7  37.8  38.6  42    44    44.5  45.2  46.4   47.3

最新更新