如何将统计模式的列添加到 psych::describe(mydata) 输出?

How to add a column for statistical mode to psych::describe(mydata) output?

有没有人编写代码在 psych::describe() 输出中添加一列来标识每个变量的统计模式?或者,您将如何实现这一目标?

例如,使用数据集mtcars,我们可以很容易地使用psych包对数据进行描述性统计,但输出中不包含统计模式。

> mydata = mtcars
> head(mydata)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

> library(psych)
> describe(mydata)

     vars  n   mean     sd median trimmed    mad   min    max  range  skew kurtosis    se
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
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
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
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
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
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
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
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
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
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
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

鉴于psych::describe(mydata)的输出不包含数据集中每个变量的统计模式信息,我们如何在psych::describe(mydata)输出中为每个变量的统计模式添加一列在数据集中?

对于上下文,我添加和使用一个函数来识别统计模式没有问题,但是为它生成输出需要我通过变量单独请求它。我尝试了多种方法来为 psych::describe (mydata) 输出添加统计模式列,但总是会出现奇怪的错误。

为了生成模式,我都为它编写了函数

getmode <- function(v) {
  uniqv <- unique(v)
  uniqv[which.max(tabulate(match(v, uniqv)))]
}

并使用了包DescTools,但两者都需要我命名一个变量来生成它的模式。我想对 mtcars 数据框中的每一列执行此操作。

tldr;我想在 psych::describe(mydata) 输出中的“se”之后添加一列,描述每个变量的统计模式。你推荐什么?

您可以 cbind describe 输出的附加函数以将其作为新列获取。

library(psych)

result <- cbind(describe(mydata), Mode = sapply(mydata, getmode))
result

#     vars  n   mean     sd median trimmed    mad  min   max range  skew kurtosis     se  Mode
#mpg     1 32  20.09   6.03   19.2   19.70   5.41 10.4  33.9  23.5  0.61   -0.373  1.065  21.0
#cyl     2 32   6.19   1.79    6.0    6.23   2.97  4.0   8.0   4.0 -0.17   -1.762  0.316   8.0
#disp    3 32 230.72 123.94  196.3  222.52 140.48 71.1 472.0 400.9  0.38   -1.207 21.909 275.8
#hp      4 32 146.69  68.56  123.0  141.19  77.10 52.0 335.0 283.0  0.73   -0.136 12.120 110.0
#drat    5 32   3.60   0.53    3.7    3.58   0.70  2.8   4.9   2.2  0.27   -0.715  0.095   3.9
#wt      6 32   3.22   0.98    3.3    3.15   0.77  1.5   5.4   3.9  0.42   -0.023  0.173   3.4
#qsec    7 32  17.85   1.79   17.7   17.83   1.42 14.5  22.9   8.4  0.37    0.335  0.316  17.0
#vs      8 32   0.44   0.50    0.0    0.42   0.00  0.0   1.0   1.0  0.24   -2.002  0.089   0.0
#am      9 32   0.41   0.50    0.0    0.38   0.00  0.0   1.0   1.0  0.36   -1.925  0.088   0.0
#gear   10 32   3.69   0.74    4.0    3.62   1.48  3.0   5.0   2.0  0.53   -1.070  0.130   3.0
#carb   11 32   2.81   1.62    2.0    2.65   1.48  1.0   8.0   7.0  1.05    1.257  0.286   4.0