在我正在处理的数据集中,有24个变量,所有变量都有99个异常值。所以我需要从所有这些变量中删除99。有没有快速的方法可以做到这一点?我可以通过使用:
一个接一个地做到这一点education <- subset(ex1, ex1$education<99)
ex1
是我的数据集,我认为我需要使用data.frame
来执行此操作吗?
答案 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