Ich habe ein Datenframe, das 214 Spalten lang und viele Zeilen lang ist, und ich möchte einen genauen Fischer-Test für jede Zeile mit Werten aus 4 Spalten durchführen.Fisher's exakter Test auf Werte von großen Datenrahmen und Umgehungsfehler
Ein Beispiel Teilmenge von relevanten Informationen aus meinem Datenrahmen wie folgt aussieht:
Variant DB.count.1 DB.count.2 pop.count.1 pop.count.2
A 23 62 35 70
B 81 4 39 22
C 51 42 49 52
D NA NA 65 8
E 73 21 50 33
F 72 13 81 10
G 61 32 75 21
H NA NA 42 22
I NA NA 60 20
J 80 12 72 24
Ich versuche, ein zu for-Schleife zu verwenden:
- eine Kontingenztabelle für den Fishers exaktem für jede Zeile erstellen Vergleichen Sie DB.counts mit pop.counts
- Führen Sie einen exakten Fisher-Test mit dieser Kontingenztabelle aus, um festzustellen, ob zwischen DB.counts und pop.counts ein Unterschied besteht
- Ausgang der p-Wert auf eine neue Spalte auf meinem Datenrahmen führen
Wie Sie es „NA“ Werte in einigen Positionen sehen können und somit in einigen Kontingenztafeln, offensichtlich ist dies ein Fehler verursacht wird, was in Ordnung ist , aber ich möchte, dass der Code einen Wert an die Spalte ausgibt, wenn er auf diesen Fehler wie "." oder "error" und springt zur nächsten Zeile/Kontingenztabelle.
also würde ich eine Ausgabe wie die wie folgt aussieht:
Variant DB.count.1 DB.count.2 pop.count.1 pop.count.2 fishers
A 23 62 35 70 0.4286
B 81 4 39 22 <0.0001
C 51 42 49 52 0.3921
D NA NA 65 8 error
E 73 21 50 33 0.0143
F 72 13 81 10 0.5032
G 61 32 75 21 0.0744
H NA NA 42 22 error
I NA NA 60 20 error
J 80 12 72 24 0.0425
Der Code, den ich zur Zeit haben (basierend auf R loop over Fisher test - Error message) ist:
df$fishers" <- for (i in 1:nrow(df))
{
table <- matrix(c(df[i,4], df[i,5], df[i,2], df[i,3]), ncol = 2, byrow = TRUE)
fisher.test(table, alternative="greater")
}
Dies scheint die Kontingenztafeln die Art und Weise zu erstellen Ich möchte aber das Problem umgehen, die Fehler zu umgehen und den p-vlaue auf die neue Spalte zu drucken. Ich habe versucht, try und tryCatch zu verwenden, war aber nicht erfolgreich.
Ich bin ein R Anfänger so wirklich schätzen alle Ratschläge, wie Sie meine Fragen oder einen Rat für mein Problem zu verbessern! Vielen Dank!
Edit 1: Ich habe jetzt versucht mit der data.table-Paket wie unten und habe, was ich brauche von Datensätzen mit "NA" -Werte aber wie überspringe ich die Fehler und machen den Code weiter? Vielen Dank!!!
library(data.table)
dt <- data.table(df)
dt[, p.val := fisher.test(matrix(c(pop.count.1, pop.count.2, DB.count.1, DB.count.2), ncol=2), workspace=1e9)$p.value, by=Variant]
df <- as.data.frame(dt)
'gelten (dd [, -1], 1, Funktion (x) tryCatch (format.pval (fisher.test (Matrix (x, 2)) $ p.value, eps = .001), Fehler = Funktion (e) 'Fehler')) 'Arbeit? – rawr
Danke, aber leider nicht, das gibt einen Fehler für jede Zeile in df $ fishers :( – emily
Entfernen Sie NA Datensätze aus Ihrem Dataset - 'no.na.df <- df [complete.cases (df),]' –