R语言数据缺失值处理

文章目录


处理缺失值的步骤一般为:

  1. 识别缺失值
  2. 补全个案或删除个案

个案、行都是指代一个意思

###识别缺失值
识别缺失值的方法很多,这里主要介绍三种。
####is.na函数
R语言中用NA代表缺失值。使用is.na函数可以检测缺失值,并返回True或FALSE组成的向量。
下面用举一个例子。

#首先生成一个有缺失值的数据框
a <- c(1,2,3,NA)
b <- c(5,6,7,8)
c <- c(7,8,NA,2)
data <- data.frame(a,b,c)
#data数据集的3和4行存在缺失值
data
   a b  c
1  1 5  7
2  2 6  8
3  3 7 NA
4 NA 8  2
#用is.na函数
is.na(data)
         a     b     c
[1,] FALSE FALSE FALSE
[2,] FALSE FALSE FALSE
[3,] FALSE FALSE  TRUE
[4,]  TRUE FALSE FALSE
#结果显示第3行第3列和第四行第1列存在缺失值。

####!complete.case函数
complete.case函数可以列出没有缺失值的行,开头加**!可以列出存在缺失值的行。R语言中!**是否定的意思。
引用上面数据集作!complete.case函数示例。

data[!complete.cases(data),]
   a b  c
3  3 7 NA
4 NA 8  2
#结果显示第3行和第4行有缺失值

还可用sum函数和mean函数获取缺失值的有关信息

#检查data中a的缺失值数量
sum(is.na(data$a))
#1个
[1] 1
#检查data中a的缺失值比例
mean(is.na(data$a))
#缺失25%
[1] 0.25
#!complete.cases函数同样可以
sum(!complete.cases(data$a))
[1] 1
mean(!complete.cases(data$a))
[1] 0.25

####mice包
当数据集较小时用is.namice包中的md.pattern函数可以帮助检测缺失值,并以矩阵或数据框形式和图片展示缺失值表格。

#首先安装mice包
install.packages("mice")
#载入mice包
library(mice)
#检测数据,以data数据集为例
md.pattern(data)
  b a c  
2 1 1 1 0
1 1 1 0 1
1 1 0 1 1
  0 1 1 2

结果在左上角显示有2行没有缺失值,有1行c变量缺失,1行a变量缺失,最右下角共计2个缺失值

返回的图片则以可视化方式展示表达同样的意思。
在这里插入图片描述

如果数据没有缺失值,则返回一行计数为0的图片

###缺失值处理
缺失值处理一般分为两种。一种是删除个案,一种是补全个案。
####删除个案
用complete.cases函数生成一个新的数据集或na.omit函数删除存在缺失值的行。

newdata <- data[complete.cases(data),]
newdata
  a b c
1 1 5 7
2 2 6 8
na.omit(data)
  a b c
1 1 5 7
2 2 6 8

####补全个案
一般采用多重插补(MI)方法补全个案,它是基于重复模拟思想而来。Amelia、mice和mi包都可以实现这一功能。本次主要使用mice包为例。
基于mice包分析通常分析过程:

  1. library(mice)
  2. imp <- mice(data,m)
  3. fit <- with(imp,analysis)
  4. pooled <-pool(fit)
  5. summary(pooled)
    其中
  • data是一个包含缺失值的矩阵或数据框。
  • imp是一个包含m个插补数据集的列表对象,默认m为5。
  • analysis是一个表达式对象,用来设定应用于m个插补数据集的统计分析方法。包括线性回归模型lm函数,广义线性模型glm函数等。
  • fit是一个包含这m个统计分析单独统计分析结果的列表对象。
  • pooled是一个包含着m个统计分析平均结果的列表对象。
    示例:
library(mice)
data(sleep,package='VIM')
imp <- mice(sleep,seed=1234)
fit <- with(imp,lm(Dream~Span+Gest))
pooled <-pool(fit)
summary(pooled)
#通过imp查看更多信息
imp
#查看实际插补值
imp$imp$Dream
#指定m个完整数据集中的一个来展示
dataset <- complete(imp,action=3)

补全缺失值数据的方法还有均值补充、中位数补充、线性回归、线性趋势等,另表不题。

发布了38 篇原创文章 · 获赞 13 · 访问量 3305

猜你喜欢

转载自blog.csdn.net/renewallee/article/details/102861880