Wie vergleiche ich zwei Datenrahmen / Tabellen und extrahiere Daten in R?
Beim Versuch, Fehlanpassungen zwischen den beiden folgenden Datenrahmen zu extrahieren, ist es mir bereits gelungen, einen neuen Datenrahmen zu erstellen, in dem Fehlanpassungen ersetzt werden.
Was ich jetzt brauche, ist eine Liste von Fehlpaarungen:
dfA <- structure(list(animal1 = c("AA", "TT", "AG", "CA"), animal2 = c("AA", "TB", "AG", "CA"), animal3 = c("AA", "TT", "AG", "CA")), .Names = c("animal1", "animal2", "animal3"), row.names = c("snp1", "snp2", "snp3", "snp4"), class = "data.frame")
# > dfA
# animal1 animal2 animal3
# snp1 AA AA AA
# snp2 TT TB TT
# snp3 AG AG AG
# snp4 CA CA CA
dfB <- structure(list(animal1 = c("AA", "TT", "AG", "CA"), animal2 = c("AA", "TB", "AG", "DF"), animal3 = c("AA", "TB", "AG", "DF")), .Names = c("animal1", "animal2", "animal3"), row.names = c("snp1", "snp2", "snp3", "snp4"), class = "data.frame")
#> dfB
# animal1 animal2 animal3
#snp1 AA AA AA
#snp2 TT TB TB
#snp3 AG AG AG
#snp4 CA DF DF
Um die Nichtübereinstimmungen zu klären, sind sie hier als 00 markiert:
# animal1 animal2 animal3
# snp1 AA AA AA
# snp2 TT TB 00
# snp3 AG AG AG
# snp4 CA 00 00
Ich brauche die folgende Ausgabe:
structure(list(snpname = structure(c(1L, 2L, 2L), .Label = c("snp2", "snp4"), class = "factor"), animalname = structure(c(2L, 1L, 2L), .Label = c("animal2", "animal3"), class = "factor"), alleledfA = structure(c(2L, 1L, 1L), .Label = c("CA", "TT"), class = "factor"), alleledfB = structure(c(2L, 1L, 1L), .Label = c("DF", "TB"), class = "factor")), .Names = c("snpname", "animalname", "alleledfA", "alleledfB"), class = "data.frame", row.names = c(NA, -3L))
# snpname animalname alleledfA alleledfB
#1 snp2 animal3 TT TB
#2 snp4 animal2 CA DF
#3 snp4 animal3 CA DF
isher habe ich versucht, zusätzliche Daten aus meinem @ zu extrahierelapply
-Funktion, mit der ich die Fehlpaarungen durch Null ersetze, ohne Erfolg. Ich habe auch erfolglos versucht, eine ifelse-Funktion zu schreiben. Hoffe ihr könnt mir hier raushelfen!
Eventuell wird dies für Datensätze mit einer Dimension von 100K x 1000 ausgeführt, sodass die Effizienz von Vorteil ist