如何为R语言psych::describe()的输出添加统计众数(mode)列
为
psych::describe()输出增加众数列的实现方案 以下是可直接运行的完整实现代码:
# 加载依赖包 library(psych) # 自定义众数计算函数(你提供的版本可直接复用) getmode <- function(v) { uniqv <- unique(v) uniqv[which.max(tabulate(match(v, uniqv)))] } # 生成基础描述统计结果 desc_res <- describe(mtcars) # 批量计算所有列的众数,和描述统计结果按变量名自动匹配 desc_res$mode <- sapply(mtcars, getmode) # 可选:严格调整列顺序,将众数列放到se列之后 desc_res <- desc_res[, c(setdiff(colnames(desc_res), "mode"), "mode")]
运行后输出结果示例:
vars n mean sd median trimmed mad min max range skew kurtosis se mode mpg 1 32 20.09 6.03 19.20 19.70 5.41 10.40 33.90 23.50 0.61 -0.37 1.07 21.00 cyl 2 32 6.19 1.79 6.00 6.23 2.97 4.00 8.00 4.00 -0.17 -1.76 0.32 8.00 disp 3 32 230.72 123.94 196.30 222.52 140.48 71.10 472.00 400.90 0.38 -1.21 21.91 275.80 hp 4 32 146.69 68.56 123.00 141.19 77.10 52.00 335.00 283.00 0.73 -0.14 12.12 110.00 drat 5 32 3.60 0.53 3.70 3.58 0.70 2.76 4.93 2.17 0.27 -0.71 0.09 3.92 wt 6 32 3.22 0.98 3.33 3.15 0.77 1.51 5.42 3.91 0.42 -0.02 0.17 3.44 qsec 7 32 17.85 1.79 17.71 17.83 1.42 14.50 22.90 8.40 0.37 0.34 0.32 17.02 vs 8 32 0.44 0.50 0.00 0.42 0.00 0.00 1.00 1.00 0.24 -2.00 0.09 0.00 am 9 32 0.41 0.50 0.00 0.38 0.00 0.00 1.00 1.00 0.36 -1.92 0.09 0.00 gear 10 32 3.69 0.74 4.00 3.62 1.48 3.00 5.00 2.00 0.53 -1.07 0.13 3.00 carb 11 32 2.81 1.62 2.00 2.65 1.48 1.00 8.00 7.00 1.05 1.26 0.29 2.00
补充说明
- 如果你使用
DescTools包的Mode函数,遇到存在多个众数的列时,可以加参数ordinal = TRUE仅返回第一个众数,避免长度不匹配报错。 - 众数计算结果和描述统计结果按变量名自动匹配,无需手动调整顺序。
- 如需保留
psych默认的打印格式,直接调用print(desc_res, digits = 2)即可。
内容的提问来源于stack exchange,提问作者Meg
相关产品推荐
相关产品推荐

