通过多个条件选择R Dataframe 中的行(在多个比较中找到具有差异表达的基因)

8zzbczxx  于 2023-04-09  发布在  其他
关注(0)|答案(1)|浏览(100)

在差异表达分析之后,我们具有具有基因、4个不同的比较组以及相应的logFC(折叠变化)和FDR(错误发现率)值的数据框。
我们想要找到在每个比较组中显示限定值的基因(例如,在每次比较中具有IogFC〉2和FDR〈0.05的所有基因)。
示例数据:

gene_creator <- paste("gene",1:1000,sep="")
genes = sample(gene_creator,100)

dex_A <- data.frame(
  gene = genes,
  group = "group_A",
  logFC = sample(c(-5:5), replace=T, size=100),
  FDR = sample(c(0.01,1), replace=T, size=100)
)

dex_B <- data.frame(
  gene = genes,
  group = "group_B",
  logFC = sample(c(-5:5), replace=T, size=100),
  FDR = sample(c(0.01,1), replace=T, size=100)
)

dex_C <- data.frame(
  gene = genes,
  group = "group_C",
  logFC = sample(c(-5:5), replace=T, size=100),
  FDR = sample(c(0.01,1), replace=T, size=100)
)

dex_D <- data.frame(
  gene = genes,
  group = "group_D",
  logFC = sample(c(-5:5), replace=T, size=100),
  FDR = sample(c(0.01,1), replace=T, size=100)
)

dex_df <- rbind(dex_A, dex_B, dex_C, dex_D)

预期输出:
具有每个基因的载体,其中在每个比较组中Fc〉2且FDR〈0.05。

qij5mzcb

qij5mzcb1#

使用dplyr(v1.1.0或更高版本),filter().bygene分组,将满足条件的行保存在all()组中。然后将pull()unique()gene s放入向量中。

library(dplyr)
set.seed(195)

dex_df %>% 
  filter(all(logFC > 2 & FDR < .05), .by = gene) %>% 
  pull(gene) %>% 
  unique()
# "gene26"  "gene715"

或者一个base R split-apply方法:

dex_df_all_4 <- dex_df |>
  split(f = dex_df$gene) |>
  sapply(\(x) all(x$logFC > 2 & x$FDR < .05))

names(dex_df_all_4[dex_df_all_4])
# "gene26"  "gene715"

相关问题