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

R中使用tidyverse单步实现双条件跨数据框阈值筛选

合并双阈值筛选的实现方法

完全可以把两个阈值条件合并到同一步完成计算,不需要拆分两次流程。
你需要的阈值规则(数值≤-0.5 或 ≥0.5)本质等价于数值绝对值≥0.5,直接把判断逻辑整合到行内统计的步骤里即可,代码如下:

library(tidyverse)

# 示例数据集(和提供的测试数据一致,已加载可跳过)
sample_data <- data.frame(
  check.names = FALSE,
  row.names = c("Entity_1","Entity_2","Entity_3",
                "Entity_4","Entity_5","Entity_6","Entity_7","Entity_8",
                "Entity_9","Entity_10","Entity_11","Entity_12","Entity_13",
                "Entity_14","Entity_15"),
  `S 1` = c(0.883643926,0.248614376,0.518091486,
            0.535221236,0.415450436,-0.940323826,-0.723796576,
            -0.824290276,NA,-0.806255146,-0.747521326,NA,3.20247786,1.10402434,
            1.005757776),
  `S 2` = c(1.005757776,1.005757776,4.51601548,3,
            7.78620408,-0.706674058,-0.572657338,-0.686018538,
            -0.514713298,-0.532390248,-0.462136378,-0.512892468,1,1.5,2.5),
  `S 3` = c(7.798089,9.2058061,5.5408169,
            1.52159119,2.63042701,NA,1.3857699,-0.152939869,-0.050295909,
            -0.337659179,-0.058902499,-0.072916919,-0.410700949,
            -0.079817359,-0.313859499),
  `S 4` = c(1.41324408,9.6038562,1.71087962,
            2.95921938,4.82199712,3.17140358,1.15931318,NA,1.58997338,
            4.76858598,NA,-0.002674678,-0.235496858,0.065630452,
            -0.175745228),
  `S 5` = c(-0.167945369,1.41324408,1.41324408,
            0.741171721,2.494610191,-0.532343489,-0.358607189,
            -0.442774239,-0.103589789,0.213156301,-0.022826199,-0.096645979,
            1.215920941,3.377354481,0.033402621)
)

# 单步完成双阈值筛选
final_result <- sample_data %>% 
  rownames_to_column(var = "Entity") %>% 
  rowwise() %>% 
  mutate(
    pass_col_count = sum(abs(c_across(starts_with("S"))) >= 0.5, na.rm = TRUE)
  ) %>% 
  filter(pass_col_count >= 3) %>% 
  ungroup()

代码说明

  • 核心改动是把原来两次分开的阈值判断,替换为abs(.) >= 0.5,一次性覆盖正负两个方向的阈值要求,逻辑和原有拆分判断完全等价。
  • 如果不想用绝对值写法,也可以替换成显式的或条件:c_across(starts_with("S")) <= -0.5 | c_across(starts_with("S")) >= 0.5,运行结果完全一致,只是代码更长。
  • 保留了na.rm = TRUE参数,会自动跳过样本列里的缺失值,和原有逻辑的缺失值处理规则保持一致。
  • 末尾加了ungroup()解除行分组,避免后续操作被分组状态影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:01:11