R语言 基本统计分析

元气小坏坏 提交于 2020-12-15 01:58:15

 本章节是数据预处理的第一步:了解数据(集)。只有充分了解了数据,我们才能对数据做进一步的预处理和后续深入的分析。


目录


1 数据结构

str()

dim()

head()

2 描述性统计分析

summary()

psych::describe()

分组计算doBy::summaryBy

分组计算psych::describeBy

3 频数和列联表

table 一维计数

xtabs 多维(交叉)计数

gmodels::CrossTable #列联表





01

数据结构

严格来讲“数据结构”不是基本统计分析的内容,但是这是了解数据的第一步,因此这里做简单普及!推荐使用str()函数
class() # 数据类型dim() # 数据(集)的行列数nrow() # 数据(集)的行数,等价于dim(mtcars)[1]ncol() # 数据(集)的列数,等价于dim(mtcars)[2]View() # 查看数据(集),以表格形式展示 如下图1head(X,n) # 显示数据集前n行str() # 查看数据(集)类型、行列数,每列的数据类型和简要数据概况

图1 View(mtcars)


> data(mtcars) > class(mtcars) # 数据类型[1] "data.frame" > dim(mtcars) # 数据(集)的行列数[1] 32 11> > > nrow(mtcars) # 数据(集)的行数,等价于dim(mtcars)[1][1] 32> dim(mtcars)[1][1] 32> > ncol(mtcars) # 数据(集)的列数,等价于dim(mtcars)[2][1] 11> dim(mtcars)[2][1] 11
> str(mtcars)'data.frame':  32 obs. of  11 variables: $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... $ cyl : num  6 6 4 6 8 6 8 4 4 6 ... $ disp: num  160 160 108 258 360 ... $ hp  : num  110 110 93 110 175 105 245 62 95 123 ... $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ... $ wt  : num  2.62 2.88 2.32 3.21 3.44 ... $ qsec: num  16.5 17 18.6 19.4 17 ... $ vs  : num  0 0 1 1 0 1 0 1 1 1 ... $ am  : num  1 1 1 0 0 0 0 0 0 0 ... $ gear: num  4 4 4 3 3 3 3 4 4 4 ... $ carb: num  4 4 1 1 2 1 4 2 2 4 ...




02


描述性统计分析


描述性统计分析主要是认识数据的整体状况,例如是否缺失、均值、方差、中位数等描述性统计变量。推荐使用summary()、psych::describe()

## 描述统计# 1.1 summary()summary(mtcars) #具体查看下方示例
# 1.2 psych::describe library(psych)psych::describe(mtcars) #具体查看下方示例
# 1.3 Hmisc::describelibrary(Hmisc)describe(df)
# 1.4 aggregate() # 分组描述统计分析myvars<-c("mpg","hp","wt")aggregate(mtcars[myvars],by=list(am=mtcars$am),mean)#输出结果am mpg hp wt1 0 17.14737 160.2632 3.7688952 1 24.39231 126.8462 2.411000
# 1.5 doBy包和psych包 具体查看下方示例# 分组计算的扩展,doBy包和psych包提供了分组计算的描述性统计量的函数,doBy包中的summaryBy()函数使用的基本格式

summary()函数提供了最小值、最大值、四分位数、均值,另外还可以因子向量和逻辑型向量的频数统计。
> summary(mtcars)      mpg             cyl             disp             hp             drat             wt             qsec       Min.   :10.40   Min.   :4.000   Min.   : 71.1   Min.   : 52.0   Min.   :2.760   Min.   :1.513   Min.   :14.50   1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8   1st Qu.: 96.5   1st Qu.:3.080   1st Qu.:2.581   1st Qu.:16.89   Median :19.20   Median :6.000   Median :196.3   Median :123.0   Median :3.695   Median :3.325   Median :17.71   Mean   :20.09   Mean   :6.188   Mean   :230.7   Mean   :146.7   Mean   :3.597   Mean   :3.217   Mean   :17.85   3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0   3rd Qu.:180.0   3rd Qu.:3.920   3rd Qu.:3.610   3rd Qu.:18.90   Max.   :33.90   Max.   :8.000   Max.   :472.0   Max.   :335.0   Max.   :4.930   Max.   :5.424   Max.   :22.90         vs               am              gear            carb       Min.   :0.0000   Min.   :0.0000   Min.   :3.000   Min.   :1.000   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:3.000   1st Qu.:2.000   Median :0.0000   Median :0.0000   Median :4.000   Median :2.000   Mean   :0.4375   Mean   :0.4062   Mean   :3.688   Mean   :2.812   3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:4.000   3rd Qu.:4.000   Max.   :1.0000   Max.   :1.0000   Max.   :5.000   Max.   :8.000  
psych::describe(mtcars) #推荐使用
> psych::describe(mtcars)     vars  n   mean     sd median trimmed    mad   min    max  range  skew kurtosis    sempg     1 32  20.09   6.03  19.20   19.70   5.41 10.40  33.90  23.50  0.61    -0.37  1.07cyl     2 32   6.19   1.79   6.00    6.23   2.97  4.00   8.00   4.00 -0.17    -1.76  0.32disp    3 32 230.72 123.94 196.30  222.52 140.48 71.10 472.00 400.90  0.38    -1.21 21.91hp      4 32 146.69  68.56 123.00  141.19  77.10 52.00 335.00 283.00  0.73    -0.14 12.12drat    5 32   3.60   0.53   3.70    3.58   0.70  2.76   4.93   2.17  0.27    -0.71  0.09wt      6 32   3.22   0.98   3.33    3.15   0.77  1.51   5.42   3.91  0.42    -0.02  0.17qsec    7 32  17.85   1.79  17.71   17.83   1.42 14.50  22.90   8.40  0.37     0.34  0.32vs      8 32   0.44   0.50   0.00    0.42   0.00  0.00   1.00   1.00  0.24    -2.00  0.09am      9 32   0.41   0.50   0.00    0.38   0.00  0.00   1.00   1.00  0.36    -1.92  0.09gear   10 32   3.69   0.74   4.00    3.62   1.48  3.00   5.00   2.00  0.53    -1.07  0.13carb   11 32   2.81   1.62   2.00    2.65   1.48  1.00   8.00   7.00  1.05     1.26  0.29

分组计算的扩展,doBy包和psych包提供了分组计算的描述性统计量的函数,doBy包中的summaryBy()函数使用的基本格式:

# doBy()包中summaryBy()函数的使用格式:# summaryBy(formula,data=dataframe,FUN=function)# formula接受以下格式:# var1+var2+var3+var4+……+varN~groupvar1+groupvar2+……#+groupvarN# 在~左侧的变量师需要分析的数值型变量,而在右侧的变量是类别型的分组变#量。library(doBy)summaryBy(mpg+hp+wt~am,data=mtcars,FUN=mystats)# 输出结果  am mpg.n mpg.mean mpg.stdev   mpg.skew mpg.kurtosis hp.n  hp.mean hp.stdev     hp.skew1  0    19 17.14737  3.833966 0.01395038   -0.8031783   19 160.2632 53.90820 -0.014225192  1    13 24.39231  6.166504 0.05256118   -1.4553520   13 126.8462 84.06232  1.35988586  hp.kurtosis wt.n  wt.mean  wt.stdev   wt.skew wt.kurtosis1  -1.2096973   19 3.768895 0.7774001 0.9759294   0.14156762   0.5634635   13 2.411000 0.6169816 0.2103128  -1.1737358
library(psych)myvars<-c("mpg","hp","wt")describeBy(mtcars[myvars],list(am=mtcars$am))#输出结果Descriptive statistics by group am: 0    vars  n   mean    sd median trimmed   mad   min    max  range  skew kurtosis    sempg    1 19  17.15  3.83  17.30   17.12  3.11 10.40  24.40  14.00  0.01    -0.80  0.88hp     2 19 160.26 53.91 175.00  161.06 77.10 62.00 245.00 183.00 -0.01    -1.21 12.37wt     3 19   3.77  0.78   3.52    3.75  0.45  2.46   5.42   2.96  0.98     0.14  0.18-------------------------------------------------------------------- am: 1    vars  n   mean    sd median trimmed   mad   min    max  range skew kurtosis    sempg    1 13  24.39  6.17  22.80   24.38  6.67 15.00  33.90  18.90 0.05    -1.46  1.71hp     2 13 126.85 84.06 109.00  114.73 63.75 52.00 335.00 283.00 1.36     0.56 23.31wt     3 13   2.41  0.62   2.32    2.39  0.68  1.51   3.57   2.06 0.21    -1.17  0.17


03


频数和列联表

推荐学习使用table、xtabs、gmodels::CrossTable

## 2.频数和列联表# 2.1  table #频数生成table(mtcars$vs)table(mtcars$gear)
# 将频数转换为比例 prop.table(table(mtcars$gear))# prop.table()*100转化成百分比
# 2.2 二维列联表# mytable<-table(A,B) A为行变量 B为列变量# xtabs()函数还可以使用公式风格的输入创建列联表# mytable<-xtabs(~A+B,data=mydata) #其中mydata是一个矩阵或者数据框# 三维以上列联表mytable<-xtabs(~Treatment+Sex+Improved,data=Arthritis)mytable <- xtabs(~gear+vs, data = mtcars) mytable
prop.table(mytable, 2) #按列计算百分比addmargins(mytable, 2) #增加行和
#使用CrossTable()创建二维列表# install.packages("gmodels")library(gmodels)CrossTable(mtcars$gear, mtcars$vs)

示例

> ## 2.频数和列联表> # 2.1  table #频数生成> table(mtcars$vs)
0 1 18 14 > table(mtcars$gear)
3 4 5 15 12 5 > > # 将频数转换为比例 > prop.table(table(mtcars$gear))
3 4 5 0.46875 0.37500 0.15625 > # prop.table()*100转化成百分比> > # 2.2 二维列联表> # mytable<-table(A,B) A为行变量 B为列变量> # xtabs()函数还可以使用公式风格的输入创建列联表> # mytable<-xtabs(~A+B,data=mydata) #其中mydata是一个矩阵或者数据框> # 三维以上列联表mytable<-xtabs(~Treatment+Sex+Improved,data=Arthritis)> mytable <- xtabs(~gear+vs, data = mtcars) > mytable vsgear 0 1 3 12 3 4 2 10 5 4 1> > prop.table(mytable, 2) #按列计算百分比 vsgear 0 1 3 0.66666667 0.21428571 4 0.11111111 0.71428571 5 0.22222222 0.07142857> addmargins(mytable, 2) #增加行和 vsgear 0 1 Sum 3 12 3 15 4 2 10 12 5 4 1 5> > #使用CrossTable()创建二维列表> # install.packages("gmodels")> library(gmodels)> CrossTable(mtcars$gear, mtcars$vs)
Cell Contents|-------------------------|| N || Chi-square contribution || N / Row Total || N / Col Total || N / Table Total ||-------------------------|
Total Observations in Table: 32
| mtcars$vs mtcars$gear | 0 | 1 | Row Total | -------------|-----------|-----------|-----------| 3 | 12 | 3 | 15 | | 1.504 | 1.934 | | | 0.800 | 0.200 | 0.469 | | 0.667 | 0.214 | | | 0.375 | 0.094 | | -------------|-----------|-----------|-----------| 4 | 2 | 10 | 12 | | 3.343 | 4.298 | | | 0.167 | 0.833 | 0.375 | | 0.111 | 0.714 | | | 0.062 | 0.312 | | -------------|-----------|-----------|-----------| 5 | 4 | 1 | 5 | | 0.501 | 0.645 | | | 0.800 | 0.200 | 0.156 | | 0.222 | 0.071 | | | 0.125 | 0.031 | | -------------|-----------|-----------|-----------|Column Total | 18 | 14 | 32 | | 0.562 | 0.438 | | -------------|-----------|-----------|-----------|



 获取源代码请至公众号后台回复:20200524


【往期回顾推荐】

R 语言 逻辑运算:TRUE/FALSE

R语言入门到可视化精选19题

R语言 高阶可视化绘图系统:ggplot2入门

R语言,入门首看、必看基础概述

R语言数据管理与dplyr、tidyr

快速掌握R语言中的apply函数族 | 精选分享

R语言 分组计算,不止group_by

用R语言让你的可视化图表动起来!动起来!!附源代码

R语言 相关系数混合可视化矩阵实现


《R数据科学》是一本专门讲解tidyverse相关包的书籍,主要涉及dplyr、tidyr、ggplot2、purrr等,非常值得学习,基本上此一本书可以解答数据处理的大部分问题




本文分享自微信公众号 - 数据驱动实践(Data-driven)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!