数据框R的一列的离群值



我正在尝试删除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 

问题是ifelse()

最终结果将是2种可能性中的1个,您应该使用<-传递到变量,最好的方法(在我看来(是这样:

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)

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

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

相关内容

  • 没有找到相关文章

最新更新