“ 本章节是数据预处理的第一步:了解数据(集)。只有充分了解了数据,我们才能对数据做进一步的预处理和后续深入的分析。”
目录
1 数据结构
str()
dim()
head()
2 描述性统计分析
summary()
psych::describe()
分组计算doBy::summaryBy
分组计算psych::describeBy
3 频数和列联表
table 一维计数
xtabs 多维(交叉)计数
gmodels::CrossTable #列联表
01
—
数据结构
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 11nrow(mtcars) # 数据(集)的行数,等价于dim(mtcars)[1][1] 32dim(mtcars)[1][1] 32ncol(mtcars) # 数据(集)的列数,等价于dim(mtcars)[2][1] 11dim(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::describelibrary(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(mtcars)mpg cyl disp hp drat wt qsecMin. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0 Min. :2.760 Min. :1.513 Min. :14.501st 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.89Median :19.20 Median :6.000 Median :196.3 Median :123.0 Median :3.695 Median :3.325 Median :17.71Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7 Mean :3.597 Mean :3.217 Mean :17.853rd 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.90Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0 Max. :4.930 Max. :5.424 Max. :22.90vs am gear carbMin. :0.0000 Min. :0.0000 Min. :3.000 Min. :1.0001st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000Median :0.0000 Median :0.0000 Median :4.000 Median :2.000Mean :0.4375 Mean :0.4062 Mean :3.688 Mean :2.8123rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000Max. :1.0000 Max. :1.0000 Max. :5.000 Max. :8.000
> 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)=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.35988586wt.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")=mtcars$am))#输出结果Descriptive statistics by groupam: 0vars 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.18am: 1vars 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 #频数生成vs)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)mytableprop.table(mytable, 2) #按列计算百分比addmargins(mytable, 2) #增加行和#使用CrossTable()创建二维列表install.packages("gmodels")library(gmodels)gear, mtcars$vs)
示例
> ## 2.频数和列联表> # 2.1 table #频数生成> table(mtcars$vs)0 118 14> table(mtcars$gear)3 4 515 12 5>> # 将频数转换为比例> prop.table(table(mtcars$gear))3 4 50.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)> mytablevsgear 0 13 12 34 2 105 4 1>> prop.table(mytable, 2) #按列计算百分比vsgear 0 13 0.66666667 0.214285714 0.11111111 0.714285715 0.22222222 0.07142857> addmargins(mytable, 2) #增加行和vsgear 0 1 Sum3 12 3 154 2 10 125 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$vsmtcars$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”

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