Utworzyłem zestaw danych za pomocą WHO ATC/DDD Index kilka miesięcy wcześniej i chcę się upewnić, że baza danych online pozostanie niezmieniona już dziś, więc pobrałem ją ponownie i spróbowałem użyć pakiet digest
w R, aby dokonać porównania.za pomocą skrótu do określenia, czy 2 ramki danych są identyczne (CZĘŚĆ 01)
Dwa zestawy danych (w formacie txt) można pobrać here. (Jestem świadomy, że możesz uważać, że pliki są niebezpieczne i mogą zawierać wirusa, ale nie wiem, jak wygenerować fałszywy zestaw danych w celu odtworzenia problemu, który mam teraz, więc ostatecznie przesyłaję zestaw danych)
napisałem mały skrypt jak poniżej:
library(digest)
ddd.old <- read.table("ddd.table.old.txt",header=TRUE,stringsAsFactors=FALSE)
ddd.new <- read.table("ddd.table.new.txt",header=TRUE,stringsAsFactors=FALSE)
ddd.old[,"ddd"] <- as.character(ddd.old[,"ddd"])
ddd.new[,"ddd"] <- as.character(ddd.new[,"ddd"])
ddd.old <- data.frame(ddd.old, hash = apply(ddd.old, 1, digest),stringsAsFactors=FALSE)
ddd.new <- data.frame(ddd.new, hash = apply(ddd.new, 1, digest),stringsAsFactors=FALSE)
ddd.old <- ddd.old[order(ddd.old[,"hash"]),]
ddd.new <- ddd.new[order(ddd.new[,"hash"]),]
i coś naprawdę ciekawe dzieje się, gdy robię sprawdzanie:
> table(ddd.old[,"hash"]%in%ddd.new[,"hash"]) #line01
TRUE
506
> table(ddd.new[,"hash"]%in%ddd.old[,"hash"]) #line02
TRUE
506
> digest(ddd.old[,"hash"])==digest(ddd.new[,"hash"]) #line03
[1] TRUE
> digest(ddd.old)==digest(ddd.new) #line04
[1] FALSE
line01
iline02
pokazuje, że co rzędy i nddd.old
można znaleźć wddd.new
i na odwrót.line03
wskazuje, że kolumnahash
zarówno dataframe są takie sameline04
pokazuje, że dwa dataframe różnią
Co się stało? Obie ramki danych z identycznymi wierszami (od line01
i line02
), w tej samej kolejności (od line03
), ale są różne? (od line04
)
Czy mam jakieś nieporozumienie dotyczące digest
? Dzięki.
Można użyć 'all.equal (ddd.old, ddd.new)', aby sprawdzić różnice. – Marek