本节书摘来自华章计算机《r语言数据挖掘:实用项目解析》一书中的第1章,第1.13节,作者[印度]普拉迪帕塔·米什拉(pradeepta mishra),译 黄芸,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
缺失值处理在标准数据挖掘场景中是一个重要的任务。在r语言中,缺失值显示为na。na既不是字符串也不是数值型变量,它们被当作缺失值的标识。在将数据集导入r语言平台之后,必须检查所有变量,看是否存在缺失值——可使用is.na()函数。示例如下:
在上面的代码中,对象x是一个数值型向量,其中包含了一些na值。is.na()可用于验证是否存在缺失值,如存在,则输出结果为true。如果在存在na值的情况下做计算,最终会出错或者无结果。我们可以通过修改na值来替换数据集,或者可以在执行计算时移除那些na值。如上面的代码所示,在计算对象x的平均值时通过na.rm=true移除na值。
可以使用na.omit()删除数据集中的缺失值。即使数据集只缺失了一个变量,它也会删除那一整行。缺失值的处理方法有很多种:
平均值替换:对于数据向量中的缺失值,可以用该向量的平均值或中位数替代(不包括na值)。
局部平均法:取缺失值的局部平均值,通过3或5个周期移动取平均,即取3个周期的缺失数据的平均值作为先验值,根据后验值可确定缺失值应该是多少。
分隔保留:有时替换法无法完成,客户也许会有意将缺失值分隔保留下来,从而隔离地考虑缺失行为。
基于模型:有一些基于模型的缺失值替换法,例如基于回归模型预测缺失值的方法。
聚类法:可使用和回归预测相类似的方法来替换缺失值,可以采用k均值聚类法替换数据集中的缺失值。