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

如何在Excel或R中识别样本数据量不同的数据集异常值

分组识别异常值的自动化R解决方案

针对不同样本(ID)数据量不一致的数据集,无需手动指定范围,可通过R语言的分组计算自动识别异常值,标记规则与你使用的Excel四分位数法完全一致。

核心思路

按样本ID分组,对每组的Time列单独计算四分位数(Q1、Q3)、四分位距(IQR),然后判断每个数据点是否超出Q3+1.5*IQR(上限)或Q1-1.5*IQR(下限),超出则标记为1,否则为0。

实现代码

基础方案(保留计算过程列)

library(tidyverse)

# 你的示例数据集
df1 <-
  structure(list(
    Time = c(5, 17, 18, 24, 4, 8, 9, 10, 16, 15, 4, 13, 9, 17), 
    ID = c(1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3)), 
    row.names = c(NA, -14L), 
    class = c("tbl_df", "tbl", "data.frame" ))

# 分组计算并标记异常值
df_with_outliers <- df1 %>%
  group_by(ID) %>%
  mutate(
    Q1 = quantile(Time, 0.25),
    Q3 = quantile(Time, 0.75),
    IQR = Q3 - Q1,
    upper_limit = Q3 + 1.5 * IQR,
    lower_limit = Q1 - 1.5 * IQR,
    is_outlier = ifelse(Time > upper_limit | Time < lower_limit, 1, 0)
  ) %>%
  ungroup()

# 输出结果
print(df_with_outliers)

简化方案(仅保留原始列和异常值标记)

如果不需要中间计算列,可进一步筛选:

df_with_outliers_simple <- df_with_outliers %>%
  select(Time, ID, is_outlier)

print(df_with_outliers_simple)

快捷方案(利用箱线图统计函数)

直接使用R内置的boxplot.stats函数提取异常值,逻辑与四分位数法完全一致:

df_with_outliers_alt <- df1 %>%
  group_by(ID) %>%
  mutate(
    is_outlier = ifelse(Time %in% boxplot.stats(Time)$out, 1, 0)
  ) %>%
  ungroup()

print(df_with_outliers_alt)

结果说明

  • 所有计算按ID自动分组,无需手动指定每组的行范围,适配任意规模的数据集
  • is_outlier列与你Excel公式生成的标记完全一致,1代表异常值,0代表正常数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:12:39