缺失值处理

Reads: 2230 Edit

1 例子1

1.1 导入数据

> library(haven)
> missdata1=read_sav("D:/Desktop/MissData/GDP.sav")
> view(missdata1)

r-57

> 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)

r-58

1.3 方法二:变量平均值填充缺失值

> newdata2=missdata1
> newdata2$CPI[is.na(missdata1$CPI)]=mean(missdata1$CPI,na.rm=TRUE)
> View(newdata2)

r-59

1.4 方法三:缺失值前后平均值填充缺失值

> install.packages("zoo")
> library(zoo)
> newdata2$GDP=(na.locf(missdata1$GDP)+na.locf(missdata1$GDP,fromLast = TRUE))/2
> View(newdata2)

r-60

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。

r-61

r-62

r-63

r-64

第二步:安装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中!



获取案例数据,请关注微信公众号并回复:R_dt4


Comments

Make a comment