R语言-缺失值判断以及处理
上次说了关于某个固定值,异常值,缺失值等的固定位置,今天详细说下如果数据列中出现缺失值,该如何处理。
向量组中的不说了,一般实践都是数据框。
1.数据框缺失值判断
- 数据框类型判断缺失值is.na、缺失值的填补which、缺失值所在行的删除na.omit
- 1.数据列
- 2.判断
is.na()
- 3.对应行列位置
which(arr.ind = T)
- 4.删除
na.omit
- 5.统计缺失值数量
sum,mean,table
- 6.计算忽略(平均值,求和,sd,se等等)
na.rm=TRUE
#1
> (test<-data.frame(x=c(1,2,3,4,NA),y=c(6,7,NA,8,9)))
x y
1 1 6
2 2 7
3 3 NA
4 4 8
5 NA 9
#2
> is.na(test) #test中空值的判断
x y
[1,] FALSE FALSE
[2,] FALSE FALSE
[3,] FALSE TRUE
[4,] FALSE FALSE
[5,] TRUE FALSE
#3
> which(is.na(test),arr.ind = T) #arr.ind=T可以返回缺失值的相应行列坐标
row col
[1,] 5 1
[2,] 3 2
#4
> (test_omit<-na.omit(test)) #na.omit函数可以直接删除值所在的行
x y
1 1 6
2 2 7
4 4 8
#5
> sum(test$x)
[1] NA
> sum(test$x, na.rm = TRUE)
[1] 10
#6 统计缺失值个数
> table(is.na(test))
FALSE TRUE
8 2
> sum(is.na(test))
[1] 2
> mean(is.na(test))
[1] 0.2
2.缺失值插补—回归模型
- 1.判断位置
- 2.新学一个代码
dput
- 3.非空值数据集,空值数据集
- 4.回归建模
- 5.赋值拟合数据值
#1
index1<-is.na(airquality$Ozone);index1 #对Ozone变量进行缺失值处理
[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[19] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
#
#2
> aa <- dput(colnames(airquality));aa #求出变量列名称
c("Ozone", "Solar.R", "Wind", "Temp", "Month", "Day")
#3
> Ozone_train<-airquality[!index1,c("Ozone", "Wind", "Temp", "Month", "Day")] #训练集,非空值
> Ozone_train
Ozone Wind Temp Month Day
1 41 7.4 67 5 1
2 36 8.0 72 5 2
3 12 12.6 74 5 3
> Ozone_test<-airquality[index1,c("Ozone", "Wind", "Temp", "Month", "Day")] #测试集,空值
> Ozone_test
Ozone Wind Temp Month Day
5 NA 14.3 56 5 5
10 NA 8.6 69 5 10
25 NA 16.6 57 5 25
26 NA 14.9 58 5 26
#4
> fit<-lm(Ozone~.,data = Ozone_train) #建立线性回归模型
> summary(fit)
Call:
lm(formula = Ozone ~ ., data = Ozone_train)
Residuals:
Min 1Q Median 3Q Max
-42.540 -12.582 -2.989 10.460 99.807
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -70.1051 23.7929 -2.946 0.00392 **
Wind -3.0516 0.6499 -4.696 7.65e-06 ***
Temp 2.0984 0.2653 7.909 2.10e-12 ***
Month -3.5209 1.4932 -2.358 0.02012 *
Day 0.2747 0.2297 1.196 0.23434
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 21.41 on 111 degrees of freedom
Multiple R-squared: 0.5934, Adjusted R-squared: 0.5788
F-statistic: 40.51 on 4 and 111 DF, p-value: < 2.2e-16
#5
airquality[index1,"Ozone"]<-predict(fit,newdata =Ozone_test )
看完如果对你有帮助,感谢点赞支持!
如果你是电脑端,看到右下角的 “一键三连” 了吗,没错点它[哈哈]