Итерируйте таблицы 2x2 и рыбаки точно по нескольким столбцам в большом фрейме данных в R - PullRequest
0 голосов
/ 21 февраля 2020

Я новичок в , и мне нужна помощь с циклом и повторением большого фрейма данных для создания нескольких таблиц 2x2 с функцией table(), за которыми следует 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

1 Ответ

0 голосов
/ 21 февраля 2020

Если нам интересно сделать fisher.test во всем столбце 'Gene', используя то же условие для 'Cluster'

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

In 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...