【问题标题】:Remove outliers in many variables of a dataset删除数据集中许多变量中的异常值
【发布时间】:2014-03-14 21:17:24
【问题描述】:

在我正在处理的数据集中,有 24 个变量,所有变量的异常值都是 99。所以我需要从所有这些变量中删除 99。有没有一种快速的方法可以做到这一点?我可以通过以下方式一一做到这一点:

education <- subset(ex1, ex1$education<99)

ex1 是我的数据集,我认为我需要使用data.frame 来执行此操作吗?

【问题讨论】:

  • 那么这是什么语言...?
  • 它是R?实际上,我正在尝试这个,但它不起作用: rm.outlier(ex1, fill = FALSE, median = FALSE, 相反 = FALSE) R 说它不识别 rm.outlier
  • 如果是 R,则将其标记为 R。或者至少指定它是问题。

标签: r outliers


【解决方案1】:

绝对建议使用data.frame,如果您想删除所有带有99 的行,那么您可以这样做:

ex1 <- data.frame(
  a = sample(90:99,100, replace=TRUE),
  b = sample(90:99,100, replace=TRUE),
  c = sample(90:99,100, replace=TRUE),
  d = sample(90:99,100, replace=TRUE),
  e = sample(90:99,100, replace=TRUE),
  f = sample(90:99,100, replace=TRUE)
)

print(nrow(ex1))

ex1 <- ex1[complete.cases(sapply(ex1, function(val) ifelse(val == 99, NA, val))),]

print(nrow(ex1))

print() 只是为了表明存在不同的行数)

否则,您应该使用@infominer 的建议(实际上只是对其进行了编辑以执行更简单/替代版本的删除)。

【讨论】:

  • 你用完整的案例完成了我的想法!
【解决方案2】:

试试这个

#assuming ex1 is a data.frame
#if you want to remove the 99s completely
ex.wo.outliers <-sapply(ex1, function(x) subset(x, x!=99))
#if you want to keep the 99s as NAs
ex.withsub <-sapply(ex1, function(x) ifelse(x == 99,NA,x)

第一个将删除所有变量中包含 99 的所有行 第二个将处理您的所有变量并使它们不适用

我推荐第二个,因为这将保留您的 data.frame 的尺寸。 第二个将导致每个变量的长度不同,以防您有一行包含一些 99 和一些有效值。

【讨论】:

    【解决方案3】:

    您真的是在谈论要删除的异常值还是 99 的标志值?后者只是:

    ex1[ex1 == 99] <- NA
    

    【讨论】:

      猜你喜欢
      • 2020-09-16
      • 2015-12-24
      • 2013-01-13
      • 2011-06-14
      • 2021-06-13
      • 1970-01-01
      • 2022-08-19
      • 2014-03-23
      相关资源
      最近更新 更多