首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您是否可以使用rowSums为通常具有“1”值的行进行选择,但如果所有列的值都为“1”,则可以排除行吗?

您是否可以使用rowSums为通常具有“1”值的行进行选择,但如果所有列的值都为“1”,则可以排除行吗?
EN

Stack Overflow用户
提问于 2022-10-26 09:53:55
回答 2查看 27关注 0票数 0

我有一个包含30个细菌(列)和他们所拥有的基因(行)的数据框架。如果细菌缺乏该基因,数据帧中的值为,而当细菌有该基因时,值为1

我想知道哪些基因是常见的,但在30种细菌和很少被发现的基因之间仍然存在差异。

cleansymbols3是我的数据框架,我想创建一个新的数据框架,commonsymbols只包含在至少20个细菌中发现的基因,而不是所有细菌。

下面这一行选择了在20种或更多细菌中常见的基因,但是如何设置范围20:29呢?

代码语言:javascript
复制
commonsymbols <- cleansymbols3[rowSums(cleansymbols3) >= 20, ]

我试过这条线

代码语言:javascript
复制
commonsymbols <- cleansymbols3[ which( rowSums(cleansymbols3) >= 20 | rowSums(cleansymbols3) <= 29 ), ]

但是它选择了所有的基因,可能是因为它首先寻找rowSums > 20,然后寻找rowSums < 29,它们一起是行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-26 10:51:15

使用&而不是|

代码语言:javascript
复制
commonsymbols <-
cleansymbols3[rowSums(cleansymbols3) >= 20 & rowSums(cleansymbols3) <= 29, ]

|是OR,但&是和。因此,您编写的代码正在查找行和大于20或小于30的行。字面上说,每一个数字都符合这些标准!

使用&只查找行和大于20、小于30的行。也就是说,它介于这两个值之间。

PS我删除了which()

您不需要在这个上下文中使用它,因为x[c(2,4,5)]等同于x[c(FALSE, TRUE, FALSE, TRUE, TRUE)]

票数 0
EN

Stack Overflow用户

发布于 2022-10-26 10:58:49

使用dplyr的替代答案

您也可以使用dplry包来完成这个任务:

代码语言:javascript
复制
require(dplyr)

commonsymbols <- 
  rowwise(cleansymbols3) |> 
  mutate(total = sum(c_across())) |> 
  filter(total > 20, total < 30) |> 
  select(-total)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74205801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档