我正在尝试删除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)
但它转变为NA
或NAN
的所有内容:
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
答案 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()