私は数ヶ月前にWHO ATC/DDD Indexを使ってデータセットを作成しましたが、データベースをオンラインで変更しないでください。比較のためにRのdigest
パッケージを実行します。ハッシュを使用して2つのデータフレームが同一であるかどうかを確認する(PART 01)
2つのデータセット(txt形式)はhereからダウンロードできます。 (ファイルが安全でなく、ウイルスに感染している可能性があると思うかもしれませんが、私は今問題を再現するためにダミーデータセットを生成する方法を知らないので、最終的にデータセットをアップロードします)
以下のように小さなスクリプトを書いた:
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"]),]
そして、私がチェックを行うときに、本当に面白いことが起こります。
> 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
とline02
を示しているすべての行I nddd.old
はddd.new
にあり、その逆もあります。line03
は、両方のデータフレームのため
line04
2つのデータフレームが起こる何
hash
列が同じ
異なっていることを示していることを示して?両方のデータフレームが同一の行(line01
とline02
)から同じオーダー(line03
)ですが、違いはありますか? (line04
から)
digest
についての誤解はありますか?ありがとう。
違いを確認するには、 'all.equal(ddd.old、ddd.new)'を使用できます。 – Marek