1 例子1
1.1 导入数据
> library(haven)
> missdata1=read_sav("D:/Desktop/MissData/GDP.sav")
> view(missdata1)
> summary(missdata1)
年份 GDP CPI
Length:69 Min. : 679.1 Min. : 94.1
Class :character 1st Qu.: 1943.8 1st Qu.:100.3
Mode :character Median : 9737.5 Median :102.0
Mean : 141304.2 Mean :103.4
3rd Qu.: 125643.6 3rd Qu.:103.8
Max. :1015986.2 Max. :124.1
NA's :1 NA's :1
说明:summary(missdata1)输出的最后一行显示GDP和CPI各有一个缺失值
1.2 方法一:删除缺失值的样本
> newdata1=na.omit(missdata1)
> View(newdata1)
1.3 方法二:变量平均值填充缺失值
> newdata2=missdata1
> newdata2$CPI[is.na(missdata1$CPI)]=mean(missdata1$CPI,na.rm=TRUE)
> View(newdata2)
1.4 方法三:缺失值前后平均值填充缺失值
> install.packages("zoo")
> library(zoo)
> newdata2$GDP=(na.locf(missdata1$GDP)+na.locf(missdata1$GDP,fromLast = TRUE))/2
> View(newdata2)
2 例子2
2.1 导入数据
> library(readxl)
> missdata2=read_excel("D:/Desktop/MissData/上市企业.xlsx",sheet="Sheet1")
> summary(missdata2)
说明:summary()的输出太多,故不再列出。其中,roe有7个缺失值;总资产周转率1个缺失值;员工总数2个缺失值。
2.2 采用K-邻近填充缺失值
该例子中,每个样本代表不同的企业,直接采用所有企业平均数来代替缺失数据企业的值偏差太大。所有首先找到与数据缺失企业其他财务指标最邻近的企业,用这些企业的平均数来填充缺失数据企业的值。
第一步:安装Rtools
> install.packages('installr')
> library(installr)
> install.Rtools()
说明:许多包的安装依赖Rtools。如果已经安装,可以忽略这步!
下载好安装包后,安装提示逐步进行安装Rtools,安装完成后需要重启RStudio。
第二步:安装DMwR2包
> install.packages("DMwR2")
> library(DMwR2)
Error: package or namespace load failed for ‘DMwR2’ in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]):
不存在叫‘TTR’这个名字的程辑包
> install.packages("TTR")
> library(DMwR2)
第三步:K-邻近填充缺失值
> newdata3=missdata2
> tempdata=knnImputation(missdata2[,c(7,9:13)],k=5,scale = TRUE,meth = "weighAvg")
> newdata3[,c(7,9:13)]=tempdata
说明:由于missdata2中有字符型变量,所有只抽取了7,9-13列来计算邻近的样本并填充缺失值。计算完后再替换到newdata3中!