相关文章推荐
酒量小的骆驼  ·  如何在 Pandas 中将 ...·  1 年前    · 
坐怀不乱的香蕉  ·  spring - ...·  1 年前    · 
完美的杯子  ·  MySQL写注释出现is not ...·  1 年前    · 
博学的显示器  ·  verdaccio - 掘金·  1 年前    · 
安静的牛肉面  ·  Spring/tomcat Cannot ...·  1 年前    · 

一定要先了解缺失机制,即为什么会产生缺失值。

对于随机产生的缺失值,可以删除,删除的对象分为两类,变量的删除,以及观测值的删除。当某一变量的缺失值比例很高的时候,可以直接删除,也可以用哑变量进行标志。

但缺失值的产生不是随机的,要根据它产生原因用不同的方法填补;

主要介绍三个包的常用于填补缺失值的函数。

思路一般是要定位缺失值以及查看缺失值的数量:

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