Khi cố gắng trích xuất các sự không khớp giữa hai khung dữ liệu bên dưới, tôi đã quản lý để tạo ra một khung dữ liệu mới trong đó không khớp được thay thế.
Những gì tôi cần bây giờ là một danh sách các sai lệch:Làm thế nào để so sánh hai khung/bảng dữ liệu và trích xuất dữ liệu trong 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
Để làm rõ các sai lệch, ở đây họ được đánh dấu là 00:
# animal1 animal2 animal3
# snp1 AA AA AA
# snp2 TT TB 00
# snp3 AG AG AG
# snp4 CA 00 00
tôi cần đầu ra sau đây:
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
Cho đến nay tôi đã cố gắng trích xuất dữ liệu bổ sung ra khỏi chức năng lapply
mà tôi sử dụng để thay thế các sự không phù hợp bằng không, mà không thành công. Tôi cũng đã cố gắng viết một hàm ifelse mà không thành công. Hy vọng các bạn có thể giúp tôi ở đây!
Cuối cùng này sẽ được chạy cho các tập dữ liệu có kích thước 100K 1000, vì vậy hiệu quả là một pro
làm rõ của bạn có thể được sản xuất bởi: 'ifelse (as.matrix (DFA) == as.matrix (DFB), as.matrix (DFA), "00")' – jogo
Làm rownames của 'dfA' luôn luôn phù hợp với các rownames của 'dfB'? – lukeA
@lukeA có, tôi tạo hai tập con trong đó cả tên hàng và cột sẽ luôn khớp. – Bas