删除数据集的许多变量中的异常值

时间:2014-03-14 21:17:25

标签: r outliers

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

一个接一个地做到这一点
education <- subset(ex1, ex1$education<99)

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

3 个答案:

答案 0 :(得分:2)

绝对建议使用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的建议(实际上只是编辑了一个更简单/替代版本的删除)。

答案 1 :(得分:1)

试试这个

#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)

第一个将删除任何变量中99s的所有行 第二个将处理所有变量并使它们成为NA

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

答案 2 :(得分:0)

你真的在谈论异常值或你要删除的99的旗值吗?后者只是:

ex1[ex1 == 99] <- NA