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

R新手技术求助:编写函数遍历数据列标记异常值

标记数据集中数值列异常值的R函数实现

我们采用**四分位距(IQR)**方法检测异常值(超出Q1 - 1.5*IQR或Q3 + 1.5*IQR范围的值判定为异常),以下是适配你数据集的完整代码:

1. 加载你的数据集

# 还原数据集
df <- structure(list(Time = c("10/24/2022 16:45", "10/24/2022 16:46", 
"10/24/2022 16:47", "10/24/2022 16:48", "10/24/2022 16:49", "10/24/2022 16:50", 
"10/24/2022 16:51", "10/24/2022 16:52", "10/24/2022 16:53", "10/24/2022 16:54", 
"10/24/2022 16:55", "10/24/2022 16:56", "10/24/2022 16:57", "10/24/2022 16:58", 
"10/24/2022 16:59", "10/24/2022 17:00", "10/24/2022 17:01", "10/24/2022 17:02", 
"10/24/2022 17:03"), Temperature.C. = c(32.2, 30, 31, 30, 30, 
31, 32.2, 86, 30, 30, 30, 86, 30, 31, 31, 31, 3, 32.2, 30), Relative_Humidity = c(50, 
49, 50, 50.5, 50, 49, 51, 50.5, 50, 120, 50, 50, 51, 51, 50, 
49, 52, 49, 2)), class = "data.frame", row.names = c(NA, -19L
))

2. 编写异常值标记函数

mark_outliers <- function(data) {
  # 筛选数值型列
  num_cols <- sapply(data, is.numeric)
  num_data <- data[, num_cols]
  
  # 遍历每一列,计算异常值标记
  for (col in colnames(num_data)) {
    # 计算四分位数和IQR
    q1 <- quantile(num_data[[col]], 0.25, na.rm = TRUE)
    q3 <- quantile(num_data[[col]], 0.75, na.rm = TRUE)
    iqr_val <- q3 - q1
    
    # 确定异常值上下限
    lower_limit <- q1 - 1.5 * iqr_val
    upper_limit <- q3 + 1.5 * iqr_val
    
    # 生成标记列,标记为"Outlier"或"Normal"
    data[[paste0(col, "_Outlier")]] <- ifelse(
      num_data[[col]] < lower_limit | num_data[[col]] > upper_limit,
      "Outlier",
      "Normal"
    )
  }
  
  return(data)
}

3. 运行函数并查看结果

# 生成带标记的数据集
result_df <- mark_outliers(df)

# 查看结果
print(result_df)

运行后会得到包含原数据和各数值列异常值标记的数据集,示例输出片段:

Time Temperature.C. Relative_Humidity Temperature.C._Outlier Relative_Humidity_Outlier

1 10/24/2022 16:45 32.2 50.0 Normal Normal
8 10/24/2022 16:52 86.0 50.5 Outlier Normal
10 10/24/2022 16:54 30.0 120.0 Normal Outlier

额外建议

  • 如果需要更可视化的异常值展示,可以结合boxplot()函数查看每列的分布和异常点
  • 若你的业务场景有特定的异常值判定规则,可以修改函数中的上下限计算逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:31:17