数据框 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)
但它转换为 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 种可能性中的一种,您应该使用 <-
传递给变量,最好的方法(在我看来)是这样的:
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
}
我正在尝试删除 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)
但它转换为 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 种可能性中的一种,您应该使用 <-
传递给变量,最好的方法(在我看来)是这样的:
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
}