6.6 Handling missing values

数据整理改变了数据的呈现方式,随之而来的一个话题便是缺失值。通常当我们泛泛地使用“缺失值 (missing value)” 这个名词的时候,其实是指以下两种“缺失”方式中的某一种:

  • 显式缺失(Explicitly missing): 在数据中用 NA 标识

  • 隐式缺失(Implicitly missing): 未出现在数据中的值

R for Data Science 中对这两种缺失的概括:
> An explicit missing value is the presence of an absence; an implicit missing value is the absence of a presence.

通过一个简单的数据框区分两种数据缺失的方式:

我们很容易找到 stocks 第四条观测在 return 上的一个 NA ,因为它是显式缺失的。另一个隐式缺失的值是 (year = 2016, qtr = 1) 对应的观测,它没有出现在数据集中。
数据呈现方式上的改变可以将隐式缺失值变成显式。比如,用 pivot_wider()函数构造以 year 为行字段,以 return 为值的透视表,这样就会产生一个属于水平 (year = 2016, qtr = 1)的单元格:

现在,再使用 pivot_longer() 不能得到原来的数据框,因为将比原来多出一行显示的缺失值

如果研究者认为这些缺失值是无足轻重的,values_drop_na = TRUE 将在 pivot_longer() 生成的数据框中移除含有缺失值的行,这会同时移除显式和隐式缺失值:

fill() 专门用来填充缺失值,它接受一些需要填充缺失值的列,并用最近的值调换 NA.direction 参数控制用填充的方向:direction = “up" 将由下往上填充,NA 将被替换为它下面那一列的值;direction = "donw" 反之

More useful methods dealing with missing values (in tidyr and other packages) are discussed in 17