一定要先了解缺失机制,即为什么会产生缺失值。
对于随机产生的缺失值,可以删除,删除的对象分为两类,变量的删除,以及观测值的删除。当某一变量的缺失值比例很高的时候,可以直接删除,也可以用哑变量进行标志。
但缺失值的产生不是随机的,要根据它产生原因用不同的方法填补;
主要介绍三个包的常用于填补缺失值的函数。
思路一般是要定位缺失值以及查看缺失值的数量:
is.na()
sum(is.na())
md.pattern() mice包
computemissings包
填充:na.fill()
填充,是一个比较有意思的操作,你的原始数据有可能会有缺失值NA,在做各种计算时,就会出现有问题。一种方法是,你把NA值都去掉;另外一种方法是,你把NA值进行填充后再计算。那么在填充值时,就有一些讲究了。
把NA值进行填充。
# 生成数据框
> df<-data.frame(a=c(1,NA,NA,2,NA),
+ b=c('B','A','B','B',NA),
+ c=c(rnorm(2),NA,NA,NA));df
a b c
1 1 B 0.2670988
2 NA A -0.5425200
3 NA B NA
4 2 B NA
5 NA <NA> NA
# 把数据框a列的NA,用9进行填充
> na.fill(df$a,9)
[1] 1 9 9 2 9
# 把数据框中的NA,用1进行填充
> na.fill(df,1)
a b c
[1,] " 1" "B" " 0.2670988"
[2,] "TRUE" "A" "-0.5425200"
[3,] "TRUE" "B" "TRUE"
[4,] " 2" "B" "TRUE"
[5,] "TRUE" "TRUE" "TRUE"
填充时,有时并不是用某个固定的值,而是需要基于某种规则去填充。
# 生成一个zoo类型的数据
> z <- zoo(c(2, NA, 1, 4, 5, 2), c(1, 3, 4, 6, 7, 8));z
1 3 4 6 7 8
2 NA 1 4 5 2
# 对NA进行线性插值
> na.approx(z)
1 3 4 6 7 8
2.000000 1.333333 1.000000 4.000000 5.000000 2.000000
# 对NA进行线性插值
> na.approx(z, 1:6)
1 3 4 6 7 8
2.0 1.5 1.0 4.0 5.0 2.0
# 对NA进行样条插值
> na.spline(z)
1 3 4 6 7 8
2.0000000 0.1535948 1.0000000 4.0000000 5.0000000 2.0000000
另外,我们可以针对NA的位置进行填充,比如用前值来填充或后值来填充。
a b c
1 1 B 0.2670988
2 NA A -0.5425200
3 NA B NA
4 2 B NA
5 NA <NA> NA
# 用当前列中,NA的前值来填充
> na.locf(df)
a b c
1 1 B 0.2670988
2 1 A -0.5425200
3 1 B -0.5425200
4 2 B -0.5425200
5 2 B -0.5425200
# 用当前列中,NA的后值来填充
> na.locf(df,fromLast=TRUE)
a b c
1 1 B 0.2670988
2 2 A -0.5425200
3 2 B <NA>
4 2 B <NA>
以下函数参数较为简单,help查看就可以了。
compute函数 计算数据集缺少值,并确定用那种方法进行填补,method有median/mode以及random forest三个方法;
而对于random forest是不支持字符类型值得。所以只能用于数值或者因子类型。而median/mode,当变量取值为字符、因子型时一般为mode,数值型时为median。数据数据的格式一定要是data.frame
impute函数,则是将compute的训练结果运用于需要进行填补的数据集上,该数据集为data.frame,且变量名要求和compute中data的一样。
train <- data.frame(v_int=as.integer(c(3,3,2,5,1,2,4,6))
v_num=as.numeric(c(4.1,NA,12.2,11,3.4,1.6,3.3,5.5)),
v_fact=as.factor(c('one','two',NA,'two','two','one','two','two')), stringsAsFactors = FALSE))
values <- compute(train, method="randomForest")
values2 <- compute(train) i
newdata <- data.frame(v_int=as.integer(c(1,1,2,NA))
v_num=as.numeric(c(1.1,NA,2.2,NA)),
v_fact=as.factor(c('one','one','one',NA)), stringsAsFactors = FALSE))
is.na(newdata)
colSums(is.na(newdata))
impute(newdata,object=values)
impute(newdata,object=values2)
主要是通过
R语言
,对日期数据进行处理,并补全缺失数据
rawdata<- read.csv("C:/Users/li/Desktop/ss.csv",fill=F)
#提取数据 ss1,并组合数据-------------------------------
ts1<-rawdata$ts1
ts11<-as.Date(ts1,'%Y/%m/%d')
false<-is.na(ts11)
ts21<-ts11[!false]
ss1<-rawdata$SS1
ss1<-ss1[!false]
library(zoo)
data1<-zoo(ss1,ts21)
#补全不规则数据(时间的缺失和缺失值)
date1<-zoo(,seq(start(data1),end(data1),'day'))
datanew1<-merge(data1,date1)
datanew1[is.na(datanew1)]<-median(datanew1,na.rm = T)
#提取数据 ss2
缺失值1. is.na 确实值位置判断注意: 缺失值被认为是不可比较的,即便是与缺失值自身的比较。这意味着无法使用比较运算
符来检测缺失值是否存在。例如,逻辑测试myvar == NA的结果永远不会为TRUE。作为
替代,你只能使用处理缺失值的函数(如本节中所述的那些)来识别出R数据对象中的缺
失值。2. na.omit() 删除不完整观测3. knnImputation K近邻填补
R语言
处理缺失数据的5个常用包1.常用缺失数据处理包2. MICE 包2.1基本介绍2.2 实例展示3.Amelia包3.1基本介绍3.2实例展示4.missForest包4.1基本介绍4.2实例展示5.Hmisc包5.1基本介绍5.2实例展示6.mi包6.1基本介绍6.2实例展示
1.常用缺失数据处理包
1.MICE
2.Amelia
3.missForest
4.Hmisc
2. MICE 包
2.1基本介绍
MICE (Multivariate Imputation via Chained
3)删除包含缺失值的实例或用合理的数值代替(插补)缺失值
缺失值数据的分类:
1)完全随机缺失:若某变量的缺失数据与其他任何观测或未观测变量都不相关,则数据为完全随机缺失(MCAR)。
2)随机缺失:若某变量上的缺失数据与其他观测变量相关,与它自己的未观测值不相关,则数据为随机缺失(MAR)。
3)非随机缺失:若缺失数据不属于MCAR或MAR,则数据为非随机缺失(NMAR)
识别缺失数据的数目、分布和模式有两个目
本人正在学习
R语言
,想利用这个平台记录自己一些自己的学习情况,方便以后查找,也想分享出来提供一些资料给同样学习
R语言
的同学们。(如果内容有错误,欢迎大家批评指正)
1.关于时间序列xts包的部分基本操作
(1)as.POSIXct(时间字符串)函数是将时间字符串转化为时间序列类型的数据
(2)xts(时间序列数据,时间标签)函数试讲时间序列数据依次添加到时间标签后面
(3)apply.daily(数据集,函数)函数是将数据集按天进行操作
apply.monthly()按月
apply.weekly)按周