数据框 R 的一列的离群值

Outliers of a column of a data frame R

我正在尝试删除 r:

中数据集特定列的离群值(用 NA 代替)
dat2 <- read.csv("~/Rutas Grises/dat2.csv")

这是列摘要,它有 NA: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 

问题出在 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 的列,否则它会创建一个名为 pct_desti_unicos_sms 的新向量。这样做:

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)

此外,因此您在 ifelse 中的 no 条件不会影响任何内容,您只需使用 if():

if(!is.na(dat2$pct_desti_unicos_sms) & dat2$pct_desti_unicos_sms > f) {
  dat2$pct_desti_unicos_sms <- NA
}