Próbując wyodrębnić niedopasowania między dwiema poniższymi ramkami danych, udało mi się już utworzyć nową ramkę danych, w której zastępowane są niedopasowania.
Co muszę teraz jest lista niedopasowania:Jak porównać dwie ramki danych/tabele i wyodrębnić dane w R?
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
celu wyjaśnienia rozbieżności, tutaj są one oznaczone jako 00 na:
# animal1 animal2 animal3
# snp1 AA AA AA
# snp2 TT TB 00
# snp3 AG AG AG
# snp4 CA 00 00
muszę następujący wynik:
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
Do tej pory próbowałem wyodrębnić dodatkowe dane z mojej funkcji lapply
, której używam, aby zastąpić niedopasowania o zero, ale bez powodzenia. Próbowałem również napisać funkcję ifelse bez powodzenia. Mam nadzieję, że możecie mi pomóc tutaj!
Ostatecznie ten będzie prowadzony do zbiorów danych o wymiarze 100K przez 1000, więc wydajność jest pro
Twój wyjaśnienie może wyprodukowany przez: 'ifelse (as.matrix (DFA) == as.matrix (DFB), as.matrix (DFA), "00")' – jogo
Wykonaj rownames z 'dfA' zawsze pasuje do rownames 'dfB'? – lukeA
@lukeA Tak, tworzę dwa podzestawy, w których zarówno nazwa wiersza, jak i kolumny będą zawsze zgodne. – Bas