我有这种数据框,但总共有 14294 个 Gene_ID 和 36 个 Exp 列。
Gene_ID Exp_A Exp_B Exp_C Exp_D
Gene1 TRUE FALSE FALSE FALSE
Gene2 TRUE TRUE FALSE TRUE
Gene3 TRUE TRUE FALSE FALSE
Gene4 TRUE FALSE FALSE TRUE
Gene5 FALSE FALSE FALSE FALSE
我正在尝试根据 TRUE 的数量来
filter
行。我对 Gene_ID 感兴趣,其中除了一个值之外的所有值都是 TRUE,或者只有三个值都是 TRUE,等等。
我尝试过使用过滤器。我还尝试过转置数据框,其中每一列都是一个 Gene_ID,并尝试选择。
没有什么真正有效的。我也遇到了一些错误。例如:
df %>% filter(if_any(everything(), ~ .x == TRUE))
给了我一个
Error: evaluation nested too deeply: infinite recursion / options(expressions=)?
Error during wrapup: evaluation nested too deeply: infinite recursion / options(expressions=)?
Error: no more error handlers available (recursive errors?); invoking 'abort' restart
有没有最好的 dplyr 函数来做到这一点?
假设您确实有一个包含逻辑
Exp_
列的 data.frame,您可以使用 pick()
进行子集化,使用 rowSums()
进行计数:
library(dplyr)
read.table(header = TRUE, text =
"Gene_ID Exp_A Exp_B Exp_C Exp_D
Gene1 TRUE FALSE FALSE FALSE
Gene2 TRUE TRUE FALSE TRUE
Gene3 TRUE TRUE FALSE FALSE
Gene4 TRUE FALSE FALSE TRUE
Gene5 FALSE FALSE FALSE FALSE") |>
filter(rowSums(pick(starts_with("Exp")) == TRUE) == 3)
#> Gene_ID Exp_A Exp_B Exp_C Exp_D
#> 1 Gene2 TRUE TRUE FALSE TRUE
创建于 2024 年 11 月 11 日,使用 reprex v2.1.1