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

如何通过迭代方法或管道运算符删除嵌套数据集的极端异常值行

解决方案

你之前的代码失效核心原因是直接对嵌套的列表列做数值匹配,逻辑不成立。这里提供两种易上手的实现方案:

方案1:解嵌套过滤后重嵌套(新手友好,逻辑直观)

无需复杂迭代,通过管道流即可完成,适合中小体量数据集:

library(tidyverse)
library(rstatix)

# 1. 先提取所有极端异常值,保留可唯一匹配原始行的字段避免误删
extreme_outliers <- df_join %>%
  tidyr::unnest(recordings) %>%
  dplyr::group_by(clc) %>%
  rstatix::identify_outliers(sls_strength) %>%
  dplyr::filter(is.extreme == TRUE) %>%
  dplyr::select(clc, channel, subject_id, sls_strength)

# 2. 反连接剔除极端值后,重新嵌套恢复原数据结构
df_join_clean <- df_join %>%
  tidyr::unnest(recordings) %>%
  dplyr::anti_join(extreme_outliers, by = c("clc", "channel", "subject_id", "sls_strength")) %>%
  tidyr::nest(recordings = c(subject_id, group, sxs, clc, sls_strength)) %>%
  dplyr::group_by(channel)

方案2:映射处理嵌套列(适合大数据集,无需全量解嵌套)

用purrr直接迭代嵌套的列表列,保留原始数据结构:

df_join_clean <- df_join %>%
  dplyr::mutate(
    recordings = purrr::pmap(
      list(channel, recordings),
      function(ch, df) {
        df %>%
          dplyr::group_by(clc) %>%
          rstatix::identify_outliers(sls_strength) %>%
          dplyr::filter(is.extreme == FALSE) %>%
          # 恢复原始列名,去掉异常值识别新增的标识列
          dplyr::select(all_of(colnames(df)))
      }
    )
  )

适配说明

如果你的实际数据集列名和构造示例不同(比如分组列叫sls、嵌套列叫data、数值列叫value),对应替换上述代码里的字段名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:18:03