R 如何用平均值替换异常值

R 如何用平均值替换异常值,r,R,我的问题是用平均数替换列中所有的“真”。 我已确定以下异常值: high <- mean(df$variable1) + sd(df$variable1) * 3 low <- mean(df$variable1) - sd(df$variable1) * 3 df$Outlier <- (df$variable1 < low | df$variable1 > high) high计算无异常值的平均值: avg = mean(df$Variable1[!df$ou

我的问题是用平均数替换列中所有的“真”。 我已确定以下异常值:

high <- mean(df$variable1) + sd(df$variable1) * 3
low <- mean(df$variable1) - sd(df$variable1) * 3
df$Outlier <- (df$variable1 < low | df$variable1 > high)

high计算无异常值的平均值:

avg = mean(df$Variable1[!df$outlier])
然后仅替换异常值:

df$Variable1[df$outlier] = avg
或者,在一行中:

df$Variable1[df$outlier] = mean(df$Variable1[-df$outlier])

(虽然用平均值替换离群值听起来对我来说确实是一件不应该做的事情)

虽然我个人不喜欢用平均值替换离群值,但您可以使用
dplyr
包简单地将条件突变df%突变(variable1=ifelse(离群值,#平均值,variable1)。您甚至可以对多个变量进行更通用的设置,但我们需要一个用于t的示例数据框。如果使用Annet进行聚合,您应该只过滤掉您的异常值,否则在添加回异常值时,平均值将发生变化。例如,这里的平均值从5.5增加到6.2:
df您对处理ou还有其他建议吗tliers?我应该用中位数替换它还是仅仅删除它?从一个适当的异常值检查开始(所以不是简单的平均值+/-sd*3,这不会做),这应该给你一个指示,它是否真的是一个异常值,以及如何处理它。这是一个没有上下文的相当复杂的问题。我想这取决于你想对你的数据集做什么。但我同意Annet的观点,sd*3的规则是一个相当近似的规则。