【问题标题】:Removing outliers from a dataframe using boxplot function使用箱线图函数从数据框中删除异常值
【发布时间】:2018-07-29 05:07:00
【问题描述】:

我想从我的数据框中删除至少一个变量超过 2 个标准差的所有观察结果。我有 38 个变量和另外两列。

这些行提取异常值:

std=2
outliers = boxplot(data[3:40], plot=FALSE,range=std)$out

但我无法更新我的数据框,我尝试了很多方法,例如:

data[3:40][!data[3:40] %in% outliers]

你能帮帮我吗?

【问题讨论】:

  • 我通常使用 ggplot,但是看着?boxplot:也许可以试试outline = FALSE
  • data 是什么?请提供Reproducible Example
  • data 是一个有 40 列的数据集,但我找到了解决问题的方法
  • 您应该将您的解决方案添加为答案并将其标记为正确,而不是编辑您的问题以将其添加到

标签: r boxplot outliers


【解决方案1】:

@mobupu Tjebo 是对的。 boxplot(x, outline = FALSE) 删除异常值。 这是一个简单的可重现示例。

i<-iris$Sepal.Length
i[151]<-25
boxplot(i)
boxplot(i, outline = FALSE)

【讨论】:

  • 实际上我想从我的数据框中删除异常值,而不是从箱线图中。我谈论箱线图是因为boxplot(data[3:40], plot=FALSE,range=std)$out 返回异常值列表,我想在我的数据框中匹配以删除相应的行。
【解决方案2】:

您可以删除 3:40 列中的任何变量从平均值中大于 2 标准差的行

require(magrittr); require(dplyr)
df %<>%  .[sapply(.[ ,3:40], function(x) x %between% (mean(x) + 2*c(-1, 1)*sd(x))) %>% 
            apply(1, all)
        ,]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 2017-10-26
    相关资源
    最近更新 更多