如何在expss包的tab_stat_fun中添加四分位数/IQR统计量
问题1:添加IQR和四分位数统计量
完全可以在现有逻辑下直接添加,expss提供了加权分位数计算函数w_quantile,你可以直接在tab_stat_fun里自定义对应统计量即可,修改后的代码如下:
library(expss) library(dplyr) CenAll %>% tab_cells(Maintenance, Organization, SocialConnection, Entertainment, Uniqueness, Colours, Sound, Irritated, Safe, Restricted, Threatened, Stimulated, CaredFor, Rejected, Calm, Free, Anxious, Green, Gray, Water) %>% tab_cols(total(label = "All| |"), Location) %>% tab_stat_fun( Mean = w_mean, "Median" = w_median, "Q25" = function(x, weight = NULL, ...) w_quantile(x, weight, probs = 0.25, na.rm = TRUE), "Q75" = function(x, weight = NULL, ...) w_quantile(x, weight, probs = 0.75, na.rm = TRUE), "IQR" = function(x, weight = NULL, ...) { qs = w_quantile(x, weight, probs = c(0.25, 0.75), na.rm = TRUE) return(qs[2] - qs[1]) }, "Std. dev." = w_sd, "Valid N" = w_n, method = list ) %>% tab_pivot()
如果你的数据没有加权需求,直接把w_quantile换成基础的quantile函数、去掉weight参数即可。
问题2:多变量分组生成统计表格的优化方案
有几个可以简化操作、提升规整度的实现方式:
- 如果你要统计的变量有命名规律,不用逐个手动录入
tab_cells,可以直接用变量选择语法批量选取:
比如要选所有数值变量、或者符合特定命名规则的变量,写法如下:# 示例1:批量选数据框内所有数值变量 num_vars = CenAll %>% select(where(is.numeric)) %>% colnames() # 示例2:选特定前缀的变量,比如所有以"Score_"开头的变量 # num_vars = CenAll %>% select(starts_with("Score_")) %>% colnames() CenAll %>% tab_cells(num_vars) %>% # 直接传入变量名向量即可 tab_cols(total(label = "合计| |"), Location) %>% # 上面定义的统计量函数放在此处 tab_pivot() - 如果需要调换行列布局让表格更易读,可以在
tab_pivot()后面加tab_transpose(),灵活调整统计量和分组的行列位置。 - 如果需要导出到本地Excel直接使用,可以在最后加
openxlsx::write.xlsx(file = "分组统计结果.xlsx"),expss生成的表格会保留层级格式直接导出。
内容的提问来源于stack exchange,提问作者thanos32
相关产品推荐
相关产品推荐

