R语言笔记-数值型变量的描述统计

it2024-11-17  5

文章目录

不分亚组的描述统计使用向量操作计算单个变量的描述统计量计算汇总了多个变量的数据框的描述统计量:``sapply()````psych``包:``describe()`` 分亚组的描述统计``aggregate()````epiDisplay``包:``summ()````psych``包:``describeBy()``

不分亚组的描述统计

以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(),该函数会把所有分类变量都会被当作数值变量处理。

最新回复(0)