You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DataFrame中检测偏离滑动均值超过threshold*s.d.的异常值?

标记滑动统计量下的异常值

嘿,你已经搞定了滑动均值和标准差的计算,接下来找出异常值就简单啦!咱们直接用你已经生成的mean和sd列来做判断:

步骤1:定义异常值阈值

首先确定一个阈值(常用2或3倍标准差,可按需调整):

threshold <- 2  # 比如改成3就是3倍标准差规则

步骤2:标记异常值

新增一列outlier,用逻辑值标记每个数据点是否为异常值——判断规则是当前值与滑动均值的绝对差超过 threshold 倍的滑动标准差:

df$outlier <- abs(df$value - df$mean) > threshold * df$sd

步骤3:筛选出异常值子集

如果需要单独查看所有异常值,直接筛选即可:

outlier_data <- df[df$outlier, ]
print(outlier_data)

可选:可视化异常值(更直观)

要是想在时序图里一眼定位异常值,可以用ggplot2画出来:

library(ggplot2)

ggplot(df, aes(x = timestamp, y = value)) +
  geom_line(color = "#2c3e50", linewidth = 0.8) +
  geom_point(aes(color = outlier), size = 2.5) +
  scale_color_manual(values = c("#95a5a6", "#e74c3c")) +  # 正常点灰色,异常点红色
  labs(title = "时序数据与异常值标记",
       x = "时间戳", y = "数值") +
  theme_minimal()

小提示

你用rollapply时设置了fill = "extend",这会让首尾的滑动统计量用边界值填充,确保每个数据点都有对应的均值和标准差,不会出现NA值影响判断~

内容的提问来源于stack exchange,提问作者Jatt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:35:13