数据框R

时间:2017-05-03 19:08:56

标签: r replace null outliers quantile

我正在尝试删除r中数据集的特定列的异常值(替换为NA):

dat2 <- read.csv("~/Rutas Grises/dat2.csv")

这是列摘要,它有NAs:summary(dat2$pct_desti_unicos_sms)

    Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
  0.2632   0.5587   1.0470   8.4050   2.5640 100.0000      673 

定义阈值:f<-quantile(dat2$pct_desti_unicos_sms,3/4,na.rm = T)*1.5

我如何尝试删除异常值

ifelse(test = !is.na(dat2$pct_desti_unicos_sms) & dat2$pct_desti_unicos_sms > f,
       yes = pct_desti_unicos_sms <- NA,
       no = pct_desti_unicos_sms <- dat2$pct_desti_unicos_sms)

但它转变为NANAN的所有内容:

dat2$pct_desti_unicos_sms<-as.numeric(dat2$pct_desti_unicos_sms)
summary(dat2$pct_desti_unicos_sms)


Min.   1st Qu.  Median  Mean 3rd   Qu.    Max.    NA's 
  NA      NA      NA     NaN       NA      NA    1911 

1 个答案:

答案 0 :(得分:1)

问题在于ifelse()

最终结果将是2种可能性之一,您应该使用<-传递给变量,这样做的最佳方式(在我看来)是这样的:

dat2$pct_desti_unicos_sms <- ifelse(
  test = !is.na(dat2$pct_desti_unicos_sms) & dat2$pct_desti_unicos_sms > f,
  yes = NA,
  no = dat2$pct_desti_unicos_sms)

但是,如果你想保持你的方式,你需要写pct_desti_unicos_sms是来自dat2的{​​{1}}运算符的列,否则会创建一个新的向量叫$。这样做:

pct_desti_unicos_sms

另外,因此ifelse中的ifelse(test = !is.na(dat2$pct_desti_unicos_sms) & dat2$pct_desti_unicos_sms > f, yes = dat2$pct_desti_unicos_sms <- NA, no = dat2$pct_desti_unicos_sms <- dat2$pct_desti_unicos_sms) 条件对任何事情都没有影响,您只需使用no

if()