R语言入门:处理缺失值和数据清洗

摘要:
R语言为我们提供了一些有用的函数来处理缺失的数据值。让我们先看看缺失的数据值是什么!I数据缺失值在R语言中,数据缺失值用NA表示。有时我们发现数据集中的某些值显示NA,这意味着缺少该值。缺少的值是否可以用于操作?因为缺失的值已从序列中删除,所以系统不会记录它。

R语言给我们提供了一些有用的函数来处理数据的缺失值,让我们先来看看什么是数据的缺失值吧!

一.数据的缺失值

在R语言当中数据的缺失值用NA来表示,有的时候我们会发现在一个数据集当中的某些值显示的是NA,那么就说明这个值是缺失的值了,那么缺失值是否可以用来做运算呢?

比如说我们建立一个第一个数字为缺失值的向量,第一个数字为NA,后面的数字为1到49,那因此我们可以得到:

> a<-c(NA,1:49)

构建出来的a为:

> a
 [1] NA  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
[22] 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
[43] 42 43 44 45 46 47 48 49

如果我们想要计算a当中所有数字的和将会也是NA,因为在这个序列当中一旦有一个数值为缺失值,那么数据的总和很显然也不知道是多少,如下面的代码所示:

> sum(a)
[1] NA

那么我们如何才能够解决这个问题呢?那就是在使用sum()函数的时候,后面加上参数na.rm=T即可,英文含义是移除(remove)缺失值(na)是真的(T),代码如下所示:

> sum(a,na.rm = T)
[1] 1225

这样我们就可以计算除了缺失值之外所有数字的总和了。同样的我们可以将这个规律应用于求解平均值mean:

> mean(a,na.rm = T)
[1] 25

那么我们思考一下我们求解的平均值除以的数字总数是加上了NA这个数还是加上呢?答案是没有!因为缺失值已经被我们移除这个序列了,系统并不会记录在内。我们可以利用一个新的序列来证明这一点:

> mean(1:49)
[1] 25

在只有49个数字的情况下,得到的平均值还是25,所以确实我们通过这个参数已经将缺失值移除了。

二.数据清洗

假设我们有一个数据框变量,里面有各种变量,其中有一些变量已经被缺失了,为NA值。一个典型的数据框变量我们能够使用的,现成的数据集为VIM包里的sleep数据框,引入它的代码如下:

> library(VIM)
Loading required package: colorspace
Loading required package: grid
Loading required package: data.table
data.table 1.12.8 using 2 threads (see ?getDTthreads).  Latest news: r-datatable.com
VIM is ready to use. 
 Since version 4.0.0 the GUI is in its own package VIMGUI.

          Please use the package to use the new (and old) GUI.

Suggestions and bug-reports can be submitted at: https://github.com/alexkowa/VIM/issues

Attaching package: ‘VIM’

The following object is masked from ‘package:datasets’:

    sleep

Warning messages:
1: package ‘VIM’ was built under R version 3.6.3 
2: package ‘data.table’  built under R version 3.6.3

然后引入其中的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

我们可以看到里面有很多已经缺失的数据:NA,我们如何才能够将它们清理掉呢?那就是利用na.omit()函数,这个函数会将所有出现NA缺失值的行全部删除,只保留在数据框里没有缺失值的行,代码的使用如下所示:

> na.omit(sleep)#将数据框当中拥有无效值NA的那一行全部删除
    BodyWgt BrainWgt NonD Dream Sleep  Span  Gest Pred Exp Danger
2     1.000     6.60  6.3   2.0   8.3   4.5  42.0    3   1      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
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
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
25   85.000   325.00  4.7   1.5   6.2  41.0 310.0    1   3      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
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
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
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
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
54   55.500   175.00  3.2   0.6   3.8  20.0 151.0    5   5      5
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

这样我们就可以看到处理后的数据已经没有缺失的NA值了!数据清理完毕。

免责声明:文章转载自《R语言入门:处理缺失值和数据清洗》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇NotePad++安装compare插件(两个文件对比功能)uCOS iii/uCOS Ⅲ系统时钟解释及CAN通信速度的配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vim中systemverilog的高亮显示

vim中systemverilog的高亮显示 Linux中的vim显示systemverilog语法高亮 windows中的gvim显示systemverilog语法高亮 Linux系统 查看打开vim的filetype检测文件类型的状态 :filetype 如果没有打开在家目录下的.vimrc配置文件中添加一下命令打开 syntax...

VIM基本操作

命令模式:进入:其他模式都可以直接转换到命令模式,按Esc即可。如果一次不行就多按几次。主要用来浏览和操作文件,可以使用相关的快捷键,例如:gg:跳到文件首 ngg:跳到文件n行 shitf + g:跳到行文件尾 yy: 复制光标所在的一行yny:复制光标处起的n行p:粘贴 16进制查看 gvim -b binaryfile      :%!xxd -g...

了解grep、vim的查找 和正则表达式

grep 不支持正则表达式匹配 egrep 支持正则表达式匹配,但扩展部分不支持 vim的查找 / ? :  支持正则表达式匹配,但扩展部分不支持 常用例子: grep  xxx  123.log                           基本的grep egrep    name=123.*port=80         查找包含name=1...

用Vim 加密文本

  Vim强大就在于 可以干任何想要做的事情,比如加密。Fedora 18上给大家做一个测试。首先安装 vim: sudo yum install vim -y然后检验模块是否有加密: vim --version | grep +cryptv应该输出一行,其中有 +cryptv然后 vim -x test 输入密码后编辑一下内容,我的是: test 然后...

Vim Clutch | 面向脚踏板编程

简评:这是使用硬件制作的一个离合器踏板,控制 Vim 的 insert mode 和 normal mode ~ Github 上有个关于 Vim 的项目,项目作者 Aleksandr Levchuk 可以说是非常有趣了。 他为了改善 Vim 的文本编辑速度,亲自动手为 Vim 制作了脚踏板离合器。当踩下踏板时,就会让 Vim 进入插入模式(效果如按一样)...

编辑利器——VIM for windows /文本文件编辑器

2005年5月,我开始用VIM。此后渐入佳境,原来因版权自律而放弃盗版UltraEdit的遗憾一扫而 空。并且,从VIM我才体会到,什么才是真正的编辑利器。在善用佳软或其他论坛发文,我都是先在VIM中输入,并方便高效地编辑好格式,再贴到网上。而我的通讯录、记事、读书笔记、工作记录也是在VIM中完成的。包括一些文档、数据的处理,让VIM过一下,也会提高不少效...