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

多变量不同条件离群值批量检测与统计的R语言实现求助

批量处理多变量离群值标记与统计

我来帮你实现批量处理所有变量的需求,核心思路是先把宽格式数据转成长格式,再统一应用不同变量的阈值条件,最后统计次数。以下是完整的解决方案:

步骤说明与代码实现

首先我们需要加载dplyr和tidyr包(如果没安装的话先运行install.packages(c("dplyr", "tidyr"))):

library(dplyr)
library(tidyr)

# 原始数据(注意:原始数据中的question_name列和我们要生成的列重名,先重命名避免冲突)
raw_data <- data.frame(
 id=c(1,2,1,2,3,4,4,3),
 shelter_number=c(3,2,3,2,11,15,15,11),
 original_question=c("A","B","C","A"), # 重命名原始的question_name列
 size=c(12,11,12,10,9,15,18,14),
 shelter_age=c(20,35,50,55,62,44,70,65)
)

# 批量处理离群值并统计次数
outliers <- raw_data %>%
  # 1. 转长格式:将需要检查的数值列转为question_name和text_answer
  pivot_longer(
    cols = c(shelter_number, size, shelter_age),
    names_to = "question_name",
    values_to = "text_answer"
  ) %>%
  # 2. 根据变量名应用对应的阈值过滤离群值
  filter(
    case_when(
      question_name == "shelter_number" ~ text_answer > 10,
      question_name == "size" ~ text_answer > 10,
      question_name == "shelter_age" ~ text_answer > 50,
      TRUE ~ FALSE # 其他情况直接过滤掉
    )
  ) %>%
  # 3. 按id、question_name、text_answer分组统计出现次数
  count(id, question_name, text_answer, name = "count") %>%
  # 4. 调整question_name的名称,匹配预期输出(shelter_number → shelter)
  mutate(question_name = case_when(
    question_name == "shelter_number" ~ "shelter",
    TRUE ~ question_name
  )) %>%
  # 5. 调整列顺序并排序,和预期输出一致
  select(id, question_name, text_answer, count) %>%
  arrange(id)

# 查看最终结果
print(outliers)

代码解释

  1. 转长格式:用pivot_longer把多个数值列(shelter_number、size、shelter_age)转换成统一的question_name和text_answer列,这样我们可以批量处理所有变量,不用单独写每个变量的逻辑。
  2. 阈值过滤:通过case_when为每个变量指定对应的阈值条件,精准筛选出符合要求的离群值。
  3. 统计次数:count函数直接按id、question_name、text_answer分组统计出现次数,一步完成计数需求。
  4. 格式调整:最后调整列名和顺序,让输出结果和你预期的完全匹配。

运行这段代码后,得到的结果和你提供的expected_output完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:58:12