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

如何在R中按列移除异常值(仅删异常值不删整行)

按列替换异常值(保留整行)的实现方案

1. 构造示例数据框

先把你提供的数据转换成R可处理的格式:

library(dplyr)

df <- tibble(
  IQ = c(105, 40, 70, 150, 148, 115, 110, 120, 99, 1000, 70),
  sleep = c(70, 50, 20, 150, 60, 10, 90, 40, 30, 15, 60),
  GRE = c(200, 150, 70, 80, 900, 1200, 15, 60, 70, 30, 12),
  happiness = c(15, 15, 10, 6, 7, 40, 5, 12, 15, 68, 70)
)

2. 定义异常值替换逻辑

按照你「大于mean+3sd或小于mean-3sd为异常值」的规则,自定义一个替换函数,把异常值转为NA(即仅删除该值,保留整行其他数据):

replace_outliers <- function(x) {
  # 计算列的均值和标准差(忽略已有NA)
  col_mean <- mean(x, na.rm = TRUE)
  col_sd <- sd(x, na.rm = TRUE)
  # 计算异常值上下边界
  lower_bound <- col_mean - 3 * col_sd
  upper_bound <- col_mean + 3 * col_sd
  # 替换异常值为NA
  ifelse(x < lower_bound | x > upper_bound, NA, x)
}

3. 应用到所有列

用dplyr的mutate()结合across(),把函数应用到数据框的每一列:

df_cleaned <- df %>%
  mutate(across(everything(), replace_outliers))

# 查看处理后的结果
print(df_cleaned)

4. 针对特定列处理(可选)

如果只需要处理部分列(比如仅处理IQ和GRE),只需修改across()的参数:

df_cleaned_partial <- df %>%
  mutate(across(c(IQ, GRE), replace_outliers))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:30:33