【问题标题】:Outliers of a column of a data frame R数据框 R 的列的异常值
【发布时间】:2017-10-01 18:21:10
【问题描述】:

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

【问题讨论】:

  • 我们不知道dat2$pct_desti_unicos_sms 长什么样
  • ifelse 的语法错误。应该是pct_desti_unicos_sms &lt;- ifelse(!is.na(dat2$pct_desti_unicos_sms) &amp; dat2$pct_desti_unicos_sms &gt; f, NA, dat2$pct_desti_unicos_sms)

标签: r replace null outliers quantile


【解决方案1】:

问题在于ifelse()

最终结果将是两种可能性中的一种,您应该使用&lt;- 将其传递给变量,最好的方法(在我看来)是这样的:

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
}

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 2013-04-11
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 2018-12-16
    相关资源
    最近更新 更多