Tôi đã tạo một tập dữ liệu sử dụng WHO ATC/DDD Index một vài tháng trước và tôi muốn đảm bảo cơ sở dữ liệu trực tuyến vẫn không thay đổi ngày hôm nay, vì vậy tôi đã tải xuống lại và thử sử dụng gói digest
trong R để so sánh.sử dụng hàm băm để xác định xem 2 datafram giống hệt nhau (PHẦN 01)
Hai tập dữ liệu (ở định dạng txt) có thể được tải xuống here. (Tôi biết rằng bạn có thể cho rằng tệp không an toàn và có thể có vi-rút, nhưng tôi không biết cách tạo tập dữ liệu giả để sao chép vấn đề tôi có bây giờ, vì vậy tôi tải lên tập dữ liệu cuối cùng)
And I đã viết một kịch bản ít nhất là dưới đây:
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"]),]
và một cái gì đó thực sự thú vị xảy ra khi tôi làm việc kiểm tra:
> 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
vàline02
cho thấy mỗi hàng i nddd.old
có thể được tìm thấy trongddd.new
và ngược lại.line03
cho thấy rằng cộthash
cho cả dataframe đều giống nhauline04
cho thấy rằng hai dataframe là khác nhau
gì xảy ra? Cả hai khung dữ liệu có các hàng giống hệt nhau (từ line01
và line02
), cùng một thứ tự (từ line03
), nhưng khác nhau? (từ line04
)
Hoặc tôi có bất kỳ sự hiểu lầm nào về digest
không? Cảm ơn.
Bạn có thể sử dụng 'all.equal (ddd.old, ddd.new)' để kiểm tra sự khác biệt. – Marek