首页 > 解决方案 > 如何去除异常值但保留 NA

问题描述

我有要删除异常值的数据(如下所示)。我想删除所有位于第 1 和第 99 个百分位之外的观察值。问题是有很多 NA 观察。我想保留那些 NA 观察结果。

combined

date        change_cds
<date>      <dbl>
2005-12-31  -2.5975486          
2005-11-30  -1.5873349          
2005-11-30  NA          
2005-11-30  NA          
2005-11-30  -31.7240875         
2005-12-31  -8.7011377          
2005-12-31  9.5310180           
2005-12-31  -18.9242000         
2005-12-31  -3.8466281          
2005-12-31  5.7158414
2005-11-30  13.0053128          
2005-11-30  10.2129495          
2005-11-30  NA          
2005-11-30  -13.9152604         
2005-11-30  -9.1434206  

以前我有这个代码在数据集中没有时工作NA

combined <- combined %>%
  filter(change_cds < quantile(combined$change_cds, (1-0.01)) & change_cds > quantile(combined$change_cds, 0.01))

然而,在NA引入之后,代码就崩溃了。我想排除所有位于第 1 和第 99 个百分位之外的观察值,不包括NA观察值。但我想保留所有有NA变量的行。

提前致谢。

标签: rdplyrtidyverse

解决方案


您可以使用 -

library(dplyr)

combined <- combined %>%
  filter(change_cds < quantile(change_cds, 0.99, na.rm = TRUE) & 
     change_cds > quantile(change_cds, 0.01, na.rm = TRUE) | is.na(change_cds)))

在基础 R -

combined <- subset(combined, change_cds < quantile(change_cds, 0.99, na.rm = TRUE) & 
        change_cds > quantile(change_cds, 0.01, na.rm = TRUE) | is.na(change_cds))

推荐阅读