文章目录
不分亚组的描述统计
以MASS
包中的数据集birthwt
为示例。
使用向量操作计算单个变量的描述统计量
- 单个变量统计函数计算的基本语法:
统计函数(数据框$变量名)
- 关于基本统计函数的更多内容,参见这里
计算汇总了多个变量的数据框的描述统计量:sapply()
使用dplyr
包中的select
,汇总数据框中的数值型变量。为防止重名导致的混淆,包名::函数名
特指调用指定包内的函数。
> data(birthwt,package = "MASS")
> cont.vars<-dplyr::select(birthwt,age,lwt,bwt)
使用sapply(数据框名,统计函数名)
,计算该数据框内所有变量的指定描述统计结果。
> sapply(cont.vars,mean)
age lwt bwt
23.2381 129.8148 2944.5873
> sapply(cont.vars,sd)
age lwt bwt
5.298678 30.579380 729.214295
> sapply(cont.vars,min)
age lwt bwt
14 80 709
> sapply(cont.vars,max)
age lwt bwt
45 250 4990
注意变量必须全为数值型 (预先使用select()
挑选的原因)否则会报错:
> sapply(birthwt,mean)
low age lwt race
NA 23.2380952 129.8148148 NA
smoke ptl ht ui
NA 0.1957672 NA NA
ftv bwt
0.7936508 2944.5873016
Warning messages:
1: In mean.default(X[[i]], ...) : 参数不是数值也不是逻辑值:回覆NA
2: In mean.default(X[[i]], ...) : 参数不是数值也不是逻辑值:回覆NA
3: In mean.default(X[[i]], ...) : 参数不是数值也不是逻辑值:回覆NA
4: In mean.default(X[[i]], ...) : 参数不是数值也不是逻辑值:回覆NA
5: In mean.default(X[[i]], ...) : 参数不是数值也不是逻辑值:回覆NA
> sapply(birthwt,sd)
Error in var(if (is.vector(x) || is.factor(x)) x else as.double(x), na.rm = na.rm) :
Calling var(x) on a factor x is defunct.
Use something like 'all(duplicated(x)[-1L])' to test for a constant vector.
psych
包:describe()
psych
包下describe()
可以汇总的形式计算数据框内所有变量的常见描述统计量,忽略缺失值。注意所有分类变量都会被当作数值变量处理。
> library(psych)
> describe(birthwt)
vars n mean sd median trimmed mad
low* 1 189 1.31 0.46 1 1.27 0.00
age 2 189 23.24 5.30 23 22.90 5.93
lwt 3 189 129.81 30.58 121 126.07 20.76
race* 4 189 1.85 0.92 1 1.81 0.00
smoke* 5 189 1.39 0.49 1 1.37 0.00
ptl 6 189 0.20 0.49 0 0.08 0.00
ht* 7 189 1.06 0.24 1 1.00 0.00
ui* 8 189 1.15 0.36 1 1.07 0.00
ftv 9 189 0.79 1.06 0 0.62 0.00
bwt 10 189 2944.59 729.21 2977 2961.76 834.70
min max range skew kurtosis se
low* 1 2 1 0.80 -1.36 0.03
age 14 45 31 0.71 0.53 0.39
lwt 80 250 170 1.38 2.25 2.22
race* 1 3 2 0.31 -1.75 0.07
smoke* 1 2 1 0.44 -1.82 0.04
ptl 0 3 3 2.76 8.17 0.04
ht* 1 2 1 3.55 10.67 0.02
ui* 1 2 1 1.97 1.87 0.03
ftv 0 6 6 1.56 3.00 0.08
bwt 709 4990 4281 -0.21 -0.14 53.04
分亚组的描述统计
aggregate()
基本语法:aggregate(数据框名,by=list(变量名=数据框名$变量名),统计函数名)
。若其中存在分类变量,会报错。
> aggregate(cont.vars,by=list(smoke=birthwt$smoke),mean)
smoke age lwt bwt
1 no 23.42609 130.8957 3055.696
2 yes 22.94595 128.1351 2771.919
list()
中可并列多个分类变量以实现交叉分组下的统计。
> aggregate(cont.vars,by=list(smoke=birthwt$smoke,race=birthwt$race),mean)
smoke race age lwt bwt
1 no white 26.02273 138.8409 3428.750
2 yes white 22.82692 126.3077 2826.846
3 no black 19.93750 149.4375 2854.500
4 yes black 24.10000 142.6000 2504.000
5 no other 22.36364 119.1455 2815.782
6 yes other 22.50000 124.0000 2757.167
epiDisplay
包:summ()
基本语法:summ(变量名,by=数据框名$分类变量名)
> summ(birthwt$bwt,by=birthwt$smoke)
For birthwt$smoke = no
obs. mean median s.d. min. max.
115 3055.696 3100 752.657 1021 4990
For birthwt$smoke = yes
obs. mean median s.d. min. max.
74 2771.919 2775.5 659.635 709 4238
除了输出基本统计量之外,同时还会输出一张图,用于探索数据的趋势、离群值很方便:
psych
包:describeBy()
基本语法:describeBy(数据框名,数据框名$分类变量名)
> describeBy(birthwt,birthwt$smoke)
Descriptive statistics by group
group: no
vars n mean sd median trimmed mad
low* 1 115 1.25 0.44 1 1.19 0.00
age 2 115 23.43 5.47 23 23.09 4.45
lwt 3 115 130.90 28.43 124 127.62 20.76
race* 4 115 2.10 0.93 2 2.12 1.48
smoke* 5 115 1.00 0.00 1 1.00 0.00
ptl 6 115 0.12 0.38 0 0.01 0.00
ht* 7 115 1.06 0.24 1 1.00 0.00
ui* 8 115 1.13 0.34 1 1.04 0.00
ftv 9 115 0.82 0.98 1 0.68 1.48
bwt 10 115 3055.70 752.66 3100 3086.14 816.91
min max range skew kurtosis se
low* 1 2 1 1.13 -0.74 0.04
age 14 45 31 0.77 1.00 0.51
lwt 85 241 156 1.30 2.00 2.65
race* 1 3 2 -0.19 -1.82 0.09
smoke* 1 1 0 NaN NaN 0.00
ptl 0 2 2 3.19 10.13 0.04
ht* 1 2 1 3.63 11.24 0.02
ui* 1 2 1 2.17 2.72 0.03
ftv 0 4 4 1.20 1.15 0.09
bwt 1021 4990 3969 -0.28 -0.32 70.19
---------------------------------------
group: yes
vars n mean sd median trimmed mad
low* 1 74 1.41 0.49 1.0 1.38 0.00
age 2 74 22.95 5.05 22.0 22.60 5.93
lwt 3 74 128.14 33.79 120.0 123.58 22.24
race* 4 74 1.46 0.76 1.0 1.33 0.00
smoke* 5 74 2.00 0.00 2.0 2.00 0.00
ptl 6 74 0.31 0.62 0.0 0.18 0.00
ht* 7 74 1.07 0.25 1.0 1.00 0.00
ui* 8 74 1.18 0.38 1.0 1.10 0.00
ftv 9 74 0.76 1.18 0.0 0.53 0.00
bwt 10 74 2771.92 659.63 2775.5 2782.55 630.10
min max range skew kurtosis se
low* 1 2 1 0.38 -1.88 0.06
age 14 35 21 0.55 -0.73 0.59
lwt 80 250 170 1.45 2.22 3.93
race* 1 3 2 1.23 -0.16 0.09
smoke* 2 2 0 NaN NaN 0.00
ptl 0 3 3 2.11 4.46 0.07
ht* 1 2 1 3.38 9.53 0.03
ui* 1 2 1 1.67 0.80 0.04
ftv 0 6 6 1.85 4.03 0.14
bwt 709 4238 3529 -0.28 0.23 76.68
类似于describe()
,该函数会把所有分类变量都会被当作数值变量处理。