R语言学习笔记(8)-缺失数据
2021-01-21 本文已影响0人
Akuooo
参考:https://www.bilibili.com/video/BV19x411X7C6?p=24
一、缺失数据
-
分类
(1)完全随机缺失(MCAR):某变量随机缺失数据与其他任何观测或未观测变量都不相关,则数据完全确实。
(2)随机缺失(MAR):某变量的缺失数据与其他已观测变量相关,与自己未观测值不相关。
(3)非随机缺失(NMAR) -
为何出现缺失数据
(1)机器断电,设备故障导致某观测值丢失
(2)测量未发生,如调查问卷时,有些问题没有回答or无效回答等 -
缺失值NA(not available)
NA 表示没有,但不一定为0,与零完全不同。
> 1+NA
[1] NA
但当数据中包括NA时,则不方便计算。如sum,最终值是NA
解决方法:
> a <- c(NA,1:49)
> a
[1] NA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
[29] 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
> sum(a,na.rm = TRUE)
[1] 1225
#计算平均值时是以49个数处理,还是50个呢?
> mean(a,na.rm = TRUE)
[1] 25
> mean(1:49)
[1] 25
> mean(1:50)
[1] 25.5//可看出是49个
在处理数据时,需要先查看数据中是否有NA存在-is.na()
> is.na(a)//若返回值为TRUE,则存在NA
[1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[15] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[29] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[43] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
测试VIM包中的sleep数据集:
#安装加载sleep
>install.packages("VIM")
> library(VIM)
载入需要的程辑包:colorspace
载入需要的程辑包:grid
VIM is ready to use.
Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues
载入程辑包:‘VIM’
The following object is masked from ‘package:datasets’:
sleep
> sleep
BodyWgt BrainWgt NonD Dream Sleep Span Gest Pred Exp Danger
1 6654.000 5712.00 NA NA 3.3 38.6 645.0 3 5 3
2 1.000 6.60 6.3 2.0 8.3 4.5 42.0 3 1 3
3 3.385 44.50 NA NA 12.5 14.0 60.0 1 1 1
4 0.920 5.70 NA NA 16.5 NA 25.0 5 2 3
5 2547.000 4603.00 2.1 1.8 3.9 69.0 624.0 3 5 4
6 10.550 179.50 9.1 0.7 9.8 27.0 180.0 4 4 4
7 0.023 0.30 15.8 3.9 19.7 19.0 35.0 1 1 1
8 160.000 169.00 5.2 1.0 6.2 30.4 392.0 4 5 4
9 3.300 25.60 10.9 3.6 14.5 28.0 63.0 1 2 1
10 52.160 440.00 8.3 1.4 9.7 50.0 230.0 1 1 1
11 0.425 6.40 11.0 1.5 12.5 7.0 112.0 5 4 4
12 465.000 423.00 3.2 0.7 3.9 30.0 281.0 5 5 5
13 0.550 2.40 7.6 2.7 10.3 NA NA 2 1 2
14 187.100 419.00 NA NA 3.1 40.0 365.0 5 5 5
15 0.075 1.20 6.3 2.1 8.4 3.5 42.0 1 1 1
16 3.000 25.00 8.6 0.0 8.6 50.0 28.0 2 2 2
17 0.785 3.50 6.6 4.1 10.7 6.0 42.0 2 2 2
18 0.200 5.00 9.5 1.2 10.7 10.4 120.0 2 2 2
19 1.410 17.50 4.8 1.3 6.1 34.0 NA 1 2 1
20 60.000 81.00 12.0 6.1 18.1 7.0 NA 1 1 1
21 529.000 680.00 NA 0.3 NA 28.0 400.0 5 5 5
22 27.660 115.00 3.3 0.5 3.8 20.0 148.0 5 5 5
23 0.120 1.00 11.0 3.4 14.4 3.9 16.0 3 1 2
24 207.000 406.00 NA NA 12.0 39.3 252.0 1 4 1
25 85.000 325.00 4.7 1.5 6.2 41.0 310.0 1 3 1
26 36.330 119.50 NA NA 13.0 16.2 63.0 1 1 1
27 0.101 4.00 10.4 3.4 13.8 9.0 28.0 5 1 3
28 1.040 5.50 7.4 0.8 8.2 7.6 68.0 5 3 4
29 521.000 655.00 2.1 0.8 2.9 46.0 336.0 5 5 5
30 100.000 157.00 NA NA 10.8 22.4 100.0 1 1 1
31 35.000 56.00 NA NA NA 16.3 33.0 3 5 4
32 0.005 0.14 7.7 1.4 9.1 2.6 21.5 5 2 4
33 0.010 0.25 17.9 2.0 19.9 24.0 50.0 1 1 1
34 62.000 1320.00 6.1 1.9 8.0 100.0 267.0 1 1 1
35 0.122 3.00 8.2 2.4 10.6 NA 30.0 2 1 1
36 1.350 8.10 8.4 2.8 11.2 NA 45.0 3 1 3
37 0.023 0.40 11.9 1.3 13.2 3.2 19.0 4 1 3
38 0.048 0.33 10.8 2.0 12.8 2.0 30.0 4 1 3
39 1.700 6.30 13.8 5.6 19.4 5.0 12.0 2 1 1
40 3.500 10.80 14.3 3.1 17.4 6.5 120.0 2 1 1
41 250.000 490.00 NA 1.0 NA 23.6 440.0 5 5 5
42 0.480 15.50 15.2 1.8 17.0 12.0 140.0 2 2 2
43 10.000 115.00 10.0 0.9 10.9 20.2 170.0 4 4 4
44 1.620 11.40 11.9 1.8 13.7 13.0 17.0 2 1 2
45 192.000 180.00 6.5 1.9 8.4 27.0 115.0 4 4 4
46 2.500 12.10 7.5 0.9 8.4 18.0 31.0 5 5 5
47 4.288 39.20 NA NA 12.5 13.7 63.0 2 2 2
48 0.280 1.90 10.6 2.6 13.2 4.7 21.0 3 1 3
49 4.235 50.40 7.4 2.4 9.8 9.8 52.0 1 1 1
50 6.800 179.00 8.4 1.2 9.6 29.0 164.0 2 3 2
51 0.750 12.30 5.7 0.9 6.6 7.0 225.0 2 2 2
52 3.600 21.00 4.9 0.5 5.4 6.0 225.0 3 2 3
53 14.830 98.20 NA NA 2.6 17.0 150.0 5 5 5
54 55.500 175.00 3.2 0.6 3.8 20.0 151.0 5 5 5
55 1.400 12.50 NA NA 11.0 12.7 90.0 2 2 2
56 0.060 1.00 8.1 2.2 10.3 3.5 NA 3 1 2
57 0.900 2.60 11.0 2.3 13.3 4.5 60.0 2 1 2
58 2.000 12.30 4.9 0.5 5.4 7.5 200.0 3 1 3
59 0.104 2.50 13.2 2.6 15.8 2.3 46.0 3 2 2
60 4.190 58.00 9.7 0.6 10.3 24.0 210.0 4 3 4
61 3.500 3.90 12.8 6.6 19.4 3.0 14.0 2 1 1
62 4.050 17.00 NA NA NA 13.0 38.0 3 1 1
> is.na(sleep)
nasleep.png
#colSums和rowSums计算行数和列数
> colSums(sleep)
BodyWgt BrainWgt NonD Dream Sleep Span Gest Pred Exp Danger
12324.98 17554.32 NA NA NA NA NA 178.00 150.00 162.00
> rowSums(sleep)
[1] NA 77.700 NA NA 7862.800 428.650 96.723 776.800 152.900 794.560 163.825
[12] 1221.800 NA NA 66.575 129.200 79.685 163.000 NA NA NA 333.260
[23] 55.820 NA 778.400 NA 77.701 110.540 1578.800 NA NA 53.445 117.060
[34] 1768.000 NA NA 57.023 65.978 67.800 179.600 NA 207.980 349.000 75.420
[45] 542.800 95.400 NA 61.280 139.035 405.000 264.250 274.400 NA 424.100 NA
[56] NA 99.600 239.600 89.504 327.790 67.200 NA
#去掉数据集中的缺失值,生成一个没有缺失值的数据集,可用na.omit()
> ?na.omit
> na.omit(sleep)//将包含NA的行都删除掉
处理NA.png
naomitsleep.png
但是如果缺失值过多,直接使用na.omit可能会对结果又影响
> length(rownames(sleep))
[1] 62
> length(rownames(na.omit(sleep)))
[1] 42
处理NA方法.png
二、其他缺失数据
- 缺失数据NaN,代表不可能的值
- Inf表示无穷,分为正无穷Inf和负无穷Inf,代表无穷大无穷小
差别:
NA为存在的值,但不知道是多少;
NaN是不存在的值;
Inf存在,无穷大or小,但是表示不可能的值
识别NaN、lnf
> is.nan(0/0)
[1] TRUE
> is.infinite(1/0)
[1] TRUE