我正在尝试删除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
问题是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
}