【发布时间】:2021-10-22 18:18:09
【问题描述】:
我想找出异常值并在我的数据中消除它们(名为“df”):
> head(df)
cluster machine.code age Good.Times repair.price
1 1 13010132 23 58.54 198170000
2 1 13010129 23 105.25 390847500
3 1 13010131 23 20.50 20701747
4 1 13010072 18 14.30 22340000
5 1 13010101 18 57.63 13220000
6 1 13010106 27 49.96 254450000
我的数据有 65 个集群,我想分别在每个集群中运行异常值检测, 我之前使用下面的代码对一个集群进行异常值检测,这很好:
library("ggstatsplot")
df<- read.csv("C:/Users/gadmin/Desktop/dataE.csv",header = TRUE)
ggbetweenstats(df,cluster, repair.price , outlier.tagging = TRUE)
Q <- quantile(df$repair.price, probs=c(.25, .75), na.rm = FALSE)
iqr <- IQR(df$repair.price)
up <- Q[2]+1.5*iqr # Upper Range
low<- Q[1]-1.5*iqr # Lower Range
eliminated<- subset(df, df$repair.price > (Q[1] - 1.5*iqr) & df$repair.price < (Q[2]+1.5*iqr))
ggbetweenstats(eliminated, cluster, repair.price, outlier.tagging = TRUE)
现在我想使用“for”对所有 65 个集群做同样的事情:
for(i in 1:length(unique(df$cluster))) {
...
}
但我不知道怎么办? (我的意思是在异常值检测到第一个集群之后,应该如何替换它(子集)并继续处理到另一个集群)
【问题讨论】:
-
“我想找到异常值并在我的数据中消除它们”异常值只是具有您所拥有的信息无法解释的特征的案例。是什么让他们成为异常值?如果存在数据输入错误并且绝对没有理由相信该信息,那么当然 - 删除它们。但是,如果它们的特征是准确的,那么删除它们就是一种伤害。
-
由于数据收集过程,数据异常值很可能是真正的异常值,需要删除