在R中如何基于多条件筛选数据框内符合数值范围的基因?
解决R中双条件筛选生成逻辑矩阵的问题
问题原因
你用1 < counts && counts < 5得到单个FALSE,是因为R中&&是标量逻辑运算符——它只会判断两个表达式的第一个元素的逻辑关系,返回单个布尔值,而不会对整个dataframe的每个元素做逐一判断。要对向量/矩阵元素做批量逻辑运算,需要用向量逻辑运算符&。
正确实现方法
1. 生成区间筛选的逻辑矩阵
以筛选数值在(1,5)区间内的元素为例,使用&替换&&:
# 生成TRUE/FALSE矩阵,筛选1 < 数值 <5的情况 true_false_matrix <- counts > 1 & counts < 5
如果需要包含区间边界(即≥1且≤5),调整为:
true_false_matrix <- counts >= 1 & counts <= 5
2. 提取每个样本符合条件的基因列表
继续使用你之前的代码即可:
apply(true_false_matrix, 2, which) %>% lapply(\(x) names(x))
可选:用tidyverse工具实现(更简洁)
如果你习惯用dplyr和purrr,可以这样写:
library(tidyverse) # 生成逻辑矩阵 counts %>% mutate(across(everything(), ~ .x > 1 & .x < 5)) # 直接获取每个样本的目标基因列表 map(counts, ~ names(which(.x > 1 & .x < 5)))
内容的提问来源于stack exchange,提问作者mfeldbauer
相关产品推荐
相关产品推荐

