如何在 R 中的大数据中检查 errors/outliers?

How to check for errors/outliers in large data in R?

我有一个包含 3200 万行的数据框。每一行都是一个帐号,大约有 120 列,大部分都是数字和日期。

有效检查所有列的 outliers/errors/wrong 输入的好方法是什么?

例如,我有一个包含房屋价值的列。我可以绘制它并寻找任何尖峰,但是生成这么多点的图需要一些时间。

Re ourliers:计算 meansd,然后找到值大于(比方说)3 个标准差的行。

which(sd$house.value > mean(df$house.value)+3*sd(df$house.value), arr.ind=TRUE)

不过,这只涵盖了范围的高端。您将不得不任意找到较低的数字(例如,低于六位数的任何数字都可能是错误的)。

对于日期,有两种类型的错误:格式错误,将其转换为 Date 类型时会导致 NA,所以这很容易;或误报的(例如,1890 年而不是 1980 年)找到这些的唯一方法是定义一个 "reasonable" 结果范围,然后找到该范围之外的结果。

如果您有兴趣使用多维度量来执行此操作,可以使用马氏距离 (M-dist)。 M-dist 是一种多维方法,用于测量点 P 与均值 D 的距离。要使用它,您可以使用以下代码:

library(tidyverse)
data %>% select_if(is.numeric) %>% mahalanobis(center = colMeans(.), cov = cov(.))

如果您希望每一列独立于所有其他列,那么您可以使用

library(dplyr)
library(tidyr)
library(purrr)
outlierremoval <- function(dataframe){
 dataframe %>%
      select_if(is.numeric) %>% #selects on the numeric columns
      map(~ .x[!.x %in% boxplot.stats(.)$out]) #%>%
      # not clear whether we need to output as a list or data.frame
      # if it is the latter, the columns could be of different length
      # so we may use cbind.fill
      # { do.call(rowr::cbind.fill, c(., list(fill = NA)))}

 }

outlierremoval(Clean_Data)

最后一张来自: