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

如何将数据框中3倍标准差外的异常值提取至独立data frame?

提取偏离均值3倍标准差的异常值行/列信息

可以通过转换数据格式+分组计算阈值+筛选的方式实现,不需要修改原来的替换NA代码,直接从原始数据tpose_genexp提取即可,具体方案如下:

代码实现

library(tidyverse)

# 1. 将宽格式数据转为长格式,保留行名为Sample列
long_data <- tpose_genexp %>%
  rownames_to_column(var = "Sample") %>%
  pivot_longer(cols = contains("G"), names_to = "Gene", values_to = "Expression")

# 2. 按Gene分组,计算每个基因的均值、3倍标准差阈值,筛选异常值
outliers_df <- long_data %>%
  group_by(Gene) %>%
  mutate(
    col_mean = mean(Expression, na.rm = TRUE),
    col_sd = sd(Expression, na.rm = TRUE),
    is_outlier = abs(Expression - col_mean) > 3 * col_sd
  ) %>%
  filter(is_outlier) %>%
  ungroup() %>%
  select(Sample, Gene) # 保留需要的两列

代码说明

  • rownames_to_column:把原数据的行名(Sample)转为显式列,方便后续提取。
  • pivot_longer:将所有以"G"开头的列(基因列)转为长格式,每一行对应一个Sample-Gene的表达值。
  • group_by(Gene):按基因分组,确保每个基因都用自己列的均值和标准差计算阈值。
  • abs(Expression - col_mean) > 3 * col_sd:判断当前表达值是否偏离均值超过3倍标准差。
  • 最后筛选出异常值行,只保留Sample和Gene列,就得到你需要的格式。

补充说明

如果你的原始数据里已经有NA值,记得在计算mean和sd时加上na.rm = TRUE,避免计算出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:12:06