如何用rowSums筛选存在于20-29种细菌的目标基因?
解决R语言筛选基因数据框的问题
问题分析
你需要筛选出存在于至少20种但非全部30种细菌中的基因,也就是行和(每种基因对应的细菌数量)在20~29范围内的行。之前错误使用|(逻辑或)导致条件覆盖所有行,因为>=20或<=29会包含所有可能的行和(最大行和是30,30满足>=20,其他行和都满足<=29)。
正确解决方案
以下几种方法都能实现需求:
方法1:基础R逻辑与运算符&
直接用&同时满足两个条件,这是最直接的写法:
commonsymbols <- cleansymbols3[rowSums(cleansymbols3) >= 20 & rowSums(cleansymbols3) <= 29, ]
方法2:使用dplyr的between函数(更直观)
如果习惯使用tidyverse语法,可以用dplyr的filter和between函数:
library(dplyr) commonsymbols <- cleansymbols3 %>% filter(between(rowSums(.), 20, 29))
方法3:用%in%匹配整数序列
因为行和是整数,也可以直接匹配20:29的序列:
commonsymbols <- cleansymbols3[rowSums(cleansymbols3) %in% 20:29, ]
内容的提问来源于stack exchange,提问作者DeGeneraal
相关产品推荐
相关产品推荐

