R 语言数据处理入门-2(缺失值处理)

目录

1.重编码某些值为缺失值

2.在分析中排除缺失值

3.查看缺失值所在行 

4.缺失值的数据和比例

5.列表显示缺失数据 

6.图形探索

6.1使用aggr()函数

6.2使用matrixplot()函数

7.缺失值处理

7.1直接删除法 

7.2插补法


1.重编码某些值为缺失值

NA # 缺失值符号,意为 Not Available,数值不可用
is.na()  # 检测缺失值是否存在,存在返回true
NaN # 意为 not a number,不是一个数,不可能值
is.nan()  # 识别是不是NaN
Inf和–Inf # 分别表示正无穷和负无穷值
is.infinite()  # 识别是不是无穷值
colon$age[colon$age == 99] <- NA # colon为数据集,age为数据集中的变量
colon # colon数据集中任何等于99的年龄值都将被修改为NA

2.在分析中排除缺失值

x <- c(1, 2, NA, 3)
y <- sum(x, na.rm=TRUE) # 排除x向量中的缺失值后在计算
y 
删除colon数据集中含有缺失数据的行
newcolon <- na.omit(colon)

3.查看缺失值所在行 

cancer #含有缺失值的数据集
complete.cases()
complete.cases()  # 可识别矩阵或数据框中没有缺失值的行,函数仅将NA和NaN识别为缺失值,无穷值(Inf和-Inf)被当作有效值
cancer[complete.cases(cancer),]  # 列出没有缺失值的行
data1 <- cancer[complete.cases(cancer),] # 将含有缺失值的观测删除后存储为数据框
cancer[!complete.cases(cancer),]  # 列出有一个或多个缺失值的行 
data2 <- cancer[!complete.cases(cancer),] # 将含有缺失值的数据存储为数据框

4.缺失值的数据和比例

is.na.data.frame(cancer) # 判断数据框是否存在缺失
sum(is.na(cancer)) # 统计数据中缺失值数目
is.na(cancer$age) # 判断数据是否存在缺失
sum(is.na(cancer$age)) # 统计目标列缺失值数目
mean(is.na(cancer)) # 数据框中缺失值所占的比例
mean(!is.na(cancer)) # 数据框中非缺失值所占的比例
mean(is.na(cancer$age)) # 判断目标列缺失值比例

5.列表显示缺失数据 

library(mice)  # md.pattern()函数需要包
md.pattern(cancer) # 表中的1和0显示缺失值模式:0表示变量的列中有缺失值,1则表示没有缺失值。
?md.pattern()
# 第一行表述了“无缺失值”的模式(所有元素为1)
# 最后一行给出了每个变量中缺失值的数目
# 第一列表示各缺失值模式的实例个数
# 最后一列表示各模式中有缺失值的变量的个数

 

6.图形探索

6.1使用aggr()函数

# install.packages("VIM")
library("VIM") # 函数所需安装包
aggr(cancer, prop=FALSE, numbers=TRUE) # 采用计数,默认numbers=FALSE
aggr(cancer, prop=TRUE, numbers=TRUE) # 采用比例

6.2使用matrixplot()函数

matrixplot(cancer) 
# 生成展示每个实例数据的图形,默认缺失值为红色。
# 数值型数据被重新转换到[0,1]区间,并用灰度来表示大小
# 在每个列中,浅色表示值小,深色表示值大。

7.缺失值处理

7.1直接删除法 

na.rm=TRUE # 移除缺失值
na.omit( )  # 删除所有含有缺失数据的行
mydata <- cancer
newdata <- na.omit(mydata)  # 存储没有缺失值的数据框或者矩阵形式的观测
newdata1 <- cancer[complete.cases(mydata),] # 存储没有缺失值的数据框或者矩阵形式的观测

7.2插补法

7.2.1均值插补

cancer1 <- cancer
cancer1[!complete.cases(cancer1),] 
cancer1$wt.loss[is.na(cancer1$wt.loss)] <- mean(cancer1$wt.loss, na.rm=TRUE)

7.2.2众数插补 

sleep1 <- sleep
library(DescTools)  
Mode(sleep1$Span,na.rm=TRUE) # M大写,众数可能不止一个,自行选择
sleep1$Span[is.na(sleep1$Span)] <- Mode(sleep1$Span)[1] # [1]选择第一个众数

7.3.3数值型全用均值/中位数插补的批量操作

library(dplyr);library(naniar)
sleep2 <- sleep %>% impute_mean_if(is.numeric)
sleep3 <- sleep %>% impute_median_if(is.numeric)

7.3.4多重插补法(mice包)

library(mice)  # 多重插补安装包
imp <- mice(data, m)  # imp是包含m个插补数据集的列表,包括插补过程的信息。默认m为5。
fit <- with(imp, analysis)  # fit是包含m个单独统计分析结果的列表。
# analysis是一个表达式,设定应用于m个插补数据集的统计分析方法。
# 线性回归模型:lm()、广义线性模型:glm()、广义可加模型:gam(),负二项模型:nbrm()
pooled <- pool(fit) # pooled是个包含这m个统计分析平均结果的列表。
summary(pooled)

#MICE IMPUTATION
my_imp <- mice(sleep8, m=5, maxit=20) # 5重插补,即生成5个无缺失数据集
my_imp$imp$NonD # 每个插补数据集缺失值位置的数据补齐具体数值
my_imp$imp$Sleep
sleep9 <- complete(my_imp, 4) # 选择第4个插补数据集作为结果

#MULTIPLE IMPUTATION
fit = with(my_imp, lm(Sleep ~ NonD+Dream+Span+Gest+Pred+Exp+Danger))
summary(pool(fit))

 

  • 15
    点赞
  • 136
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值