📌  相关文章
📜  如何从 R DataFrame 中的多列中删除异常值?

📅  最后修改于: 2022-05-13 01:54:45.875000             🧑  作者: Mango

如何从 R DataFrame 中的多列中删除异常值?

在本文中,我们将讨论如何在 R 编程语言中从多列中删除异常值。

为了从数据框中删除异常值,我们使用四分位距 (IQR) 方法。此方法使用第一个和第三个分位数来确定观察值是否为异常值。如果观察值是四分位距的 1.5 倍大于第三个四分位数或四分位距小于第一个四分位数的 1.5 倍,则认为它是异常值。

从 R 中的多列中删除异常值

为了找到 R 语言中的异常值,我们使用以下函数,其中我们首先使用 quantile()函数计算观测值的第一个和第三个分位数。然后我们将它们的差异计算为四分位距。然后,如果观察值是四分位距的 1.5 倍大于第三个四分位数或四分位距小于第一个四分位数的 1.5 倍,则返回 true。

然后一旦识别出异常值,我们通过使用上述函数测试它们来移除异常值。

示例 1:

这是一个示例,我们从数据框的三列中删除异常值。

R
# create sample data frame
sample_data < - data.frame(x=c(1, 2, 3, 4, 3, 2, 3, 4, 4, 5, 0),
                           y=c(4, 3, 5, 7, 8, 5, 9, 7, 6, 5, 0),
                           z=c(1, 3, 2, 9, 8, 7, 0, 8, 7, 2, 3))
print("Display original dataframe")
print(sample_data)
 
# create detect outlier function
detect_outlier < - function(x) {
 
    # calculate first quantile
    Quantile1 < - quantile(x, probs=.25)
 
    # calculate third quantile
    Quantile3 < - quantile(x, probs=.75)
 
    # calculate inter quartile range
    IQR = Quantile3-Quantile1
 
    # return true or false
    x > Quantile3 + (IQR*1.5) | x < Quantile1 - (IQR*1.5)
}
 
# create remove outlier function
remove_outlier < - function(dataframe,
                            columns=names(dataframe)) {
 
    # for loop to traverse in columns vector
    for (col in columns) {
 
        # remove observation if it satisfies outlier function
        dataframe < - dataframe[!detect_outlier(dataframe[[col]]), ]
    }
 
    # return dataframe
    print("Remove outliers")
    print(dataframe)
}
 
remove_outlier(sample_data, c('x', 'y', 'z'))


R
# create sample data frame
sample_data < - data.frame(x=c(-1, 2, 3, 4, 3, 2, 3, 4, 4, 5, 10),
                           y=c(-4, 3, 5, 7, 8, 5, 9, 7, 6, 5, 10),
                           z=c(-1, 3, 2, 9, 8, 7, 0, 8, 7, 2, 13),
                           w=c(10, 0, 1, 0, 1, 0, 1, 0, 2, 2, 10))
print("Display original dataframe")
print(sample_data)
 
 
# create detect outlier function
detect_outlier < - function(x) {
   
    # calculate first quantile
    Quantile1 < - quantile(x, probs=.25)
   
    # calculate third quantile
    Quantile3 < - quantile(x, probs=.75)
   
    # calculate inter quartile range
    IQR = Quantile3-Quantile1
   
    # return true or false
    x > Quantile3 + (IQR*1.5) | x < Quantile1 - (IQR*1.5)
}
 
# create remove outlier function
remove_outlier < - function(dataframe,
                            columns=names(dataframe)) {
   
    # for loop to traverse in columns vector
    for (col in columns) {
       
        # remove observation if it satisfies outlier function
        dataframe < - dataframe[!detect_outlier(dataframe[[col]]), ]
    }
   
    # return dataframe
    print("Remove outliers")
    print(dataframe)
}
 
remove_outlier(sample_data, c('x', 'y', 'z', 'w'))


输出:

示例 2:

这是一个示例,我们从数据框的四列中删除异常值。

R

# create sample data frame
sample_data < - data.frame(x=c(-1, 2, 3, 4, 3, 2, 3, 4, 4, 5, 10),
                           y=c(-4, 3, 5, 7, 8, 5, 9, 7, 6, 5, 10),
                           z=c(-1, 3, 2, 9, 8, 7, 0, 8, 7, 2, 13),
                           w=c(10, 0, 1, 0, 1, 0, 1, 0, 2, 2, 10))
print("Display original dataframe")
print(sample_data)
 
 
# create detect outlier function
detect_outlier < - function(x) {
   
    # calculate first quantile
    Quantile1 < - quantile(x, probs=.25)
   
    # calculate third quantile
    Quantile3 < - quantile(x, probs=.75)
   
    # calculate inter quartile range
    IQR = Quantile3-Quantile1
   
    # return true or false
    x > Quantile3 + (IQR*1.5) | x < Quantile1 - (IQR*1.5)
}
 
# create remove outlier function
remove_outlier < - function(dataframe,
                            columns=names(dataframe)) {
   
    # for loop to traverse in columns vector
    for (col in columns) {
       
        # remove observation if it satisfies outlier function
        dataframe < - dataframe[!detect_outlier(dataframe[[col]]), ]
    }
   
    # return dataframe
    print("Remove outliers")
    print(dataframe)
}
 
remove_outlier(sample_data, c('x', 'y', 'z', 'w'))

输出: