Можно также обработать уровень групповой обработкой, добавив split()
и lapply()
к ответу Мэтта. Например, чтобы получить описательную статистику по mtcars$mpg
по количеству цилиндров, мы делаем следующее:
library(psych)
splitvar <- as.factor(mtcars$cyl)
data <- split(mtcars,splitvar)
lapply(data,function(x){describe(x$mpg,IQR=TRUE)})
... и выводим:
> lapply(data,function(x){describe(x$mpg,IQR=TRUE)})
$`4`
vars n mean sd median trimmed mad min max range skew kurtosis se IQR
X1 1 11 26.66 4.51 26 26.44 6.52 21.4 33.9 12.5 0.26 -1.65 1.36 7.6
$`6`
vars n mean sd median trimmed mad min max range skew kurtosis se IQR
X1 1 7 19.74 1.45 19.7 19.74 1.93 17.8 21.4 3.6 -0.16 -1.91 0.55 2.35
$`8`
vars n mean sd median trimmed mad min max range skew kurtosis se IQR
X1 1 14 15.1 2.56 15.2 15.15 1.56 10.4 19.2 8.8 -0.36 -0.57 0.68 1.85
>
Мы также можем добавить квантили через аргумент quant=
. Здесь мы сгенерируем значения 5% и 95%.
lapply(data,function(x){describe(x$mpg,quant=c(.05,.95),IQR=TRUE)})
... и вывод:
> lapply(data,function(x){describe(x$mpg,quant=c(.05,.95),IQR=TRUE)})
$`4`
vars n mean sd median trimmed mad min max range skew kurtosis se IQR Q0.05 Q0.95
1 1 11 26.66 4.51 26 26.44 6.52 21.4 33.9 12.5 0.26 -1.65 1.36 7.6 21.45 33.15
$`6`
vars n mean sd median trimmed mad min max range skew kurtosis se IQR Q0.05 Q0.95
1 1 7 19.74 1.45 19.7 19.74 1.93 17.8 21.4 3.6 -0.16 -1.91 0.55 2.35 17.89 21.28
$`8`
vars n mean sd median trimmed mad min max range skew kurtosis se IQR Q0.05 Q0.95
1 1 14 15.1 2.56 15.2 15.15 1.56 10.4 19.2 8.8 -0.36 -0.57 0.68 1.85 10.4 18.88
>
... публикация в вики сообщества, чтобы избежать признания за ответ Мэтта.