R语言数据缺失值处理

mac2025-10-11  7

文章目录

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

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

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

###识别缺失值 识别缺失值的方法很多,这里主要介绍三种。 ####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包分析通常分析过程:

library(mice)imp <- mice(data,m)fit <- with(imp,analysis)pooled <-pool(fit)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)

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

最新回复(0)