编写可遍历数据框数值变量的R统计函数求助
批量生成数据框数值变量的统计量表格
优化单个变量统计函数
先简化你原有的describe_stats函数,避免嵌套full_join的冗余写法,同时添加缺失值处理让函数更健壮:
library(tidyverse) describe_stats <- function(x) { tibble( name = c("median", "min", "max", "lower_quantile", "upper_quantile"), value = c( median(x, na.rm = TRUE), min(x, na.rm = TRUE), max(x, na.rm = TRUE), quantile(x, 0.25, na.rm = TRUE), quantile(x, 0.75, na.rm = TRUE) ) ) }
编写批量处理函数
接下来写一个批量处理函数,自动筛选数据框中的数值变量,对每个变量调用describe_stats,并整合成统一的结果数据框:
describe_all_stats <- function(df) { # 筛选数据框中的数值型变量 numeric_vars <- select(df, where(is.numeric)) # 遍历每个数值变量,提取统计值并按列合并 numeric_vars %>% imap_dfc(function(var, var_name) { # 对单个变量生成统计量,并重命名value列为变量名 describe_stats(var) %>% rename(!!var_name := value) %>% select(-name) }) %>% # 添加统计量名称列,并移到最前面 mutate(name = c("median", "min", "max", "lower_quantile", "upper_quantile")) %>% relocate(name) }
测试示例
用mtcars数据集测试函数:
# 生成统计结果 stats_result <- describe_all_stats(mtcars) # 查看结果 print(stats_result)
输出结果结构如下(每行对应一个统计量,每列对应一个变量):
# A tibble: 5 × 11 name mpg cyl disp hp drat wt qsec vs am gear carb <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 median 19.2 6 196. 123 3.69 3.32 17.7 0 0 4 2 2 min 10.4 4 71.1 52 2.76 1.51 14.5 0 0 3 1 3 max 33.9 8 472 335 4.93 5.42 22.9 1 1 5 8 4 lower_quantile 15.4 4 120. 96 3.08 2.58 16.9 0 0 3 2 5 upper_quantile 22.8 8 326 180 3.92 3.61 18.9 1 1 4 4
提取特定统计值
你可以轻松提取目标变量的指定统计量,比如获取mpg的中位数:
stats_result %>% filter(name == "median") %>% pull(mpg) # 或者直接用索引 stats_result$mpg[stats_result$name == "median"]
内容的提问来源于stack exchange,提问作者user29619690
相关产品推荐
相关产品推荐

