首页 > 解决方案 > 在 R 中的大型数据框中的多列上精确迭代 2x2 表和渔民

问题描述

我是的新手,我正在寻找有关循环和迭代大型数据框以使用该table()函数创建多个 2x2 表的帮助,然后fishers.test()在每个表上导出优势比和s。我的有簇和基因作为这样的列:

**df**
Tag  Cluster  Gene1  Gene2  Gene3  Gene4
1    a        1      0      0      1
2    b        0      1      1      1
3    c        1      1      0      0  
4    d        0      0      0      1
5    e        1      1      0      0

这是我想要迭代和循环的代码。

tab<-table(df$Cluster =="a", df$Gene1)
fisher.test(tab)

我不知道从哪里开始,如果有任何帮助,我将不胜感激。

谢谢!

PS我的实际数据框尺寸是1010 x 191

标签: rloopsdataframep-value

解决方案


如果我们有兴趣fisher.test通过在“集群”上使用相同的条件来完成所有“基因”列

library(dplyr)
out <-  df %>% 
            summarise_at(vars(starts_with('Gene')), ~ 
                list(table(Cluster == 'a', .) %>% 
               fisher.test))
out$Gene1
out$Gene2

base R中,这可以通过lapply

out2 <- lapply(df[startsWith(names(df), "Gene")], function(v) 
           fisher.test(table(df$Cluster == "a", v)))
out2$Gene1
out2$Gene2

数据

df <- structure(list(Tag = 1:5, Cluster = c("a", "b", "c", "d", "e"
), Gene1 = c(1L, 0L, 1L, 0L, 1L), Gene2 = c(0L, 1L, 1L, 0L, 1L
), Gene3 = c(0L, 1L, 0L, 0L, 0L), Gene4 = c(1L, 1L, 0L, 1L, 0L
)), class = "data.frame", row.names = c(NA, -5L))

推荐阅读