Я создал набор данных, используя WHO ATC / DDD Index несколько месяцев назад, и я хочу убедиться, что база данных в сети остается неизменной сегодня, поэтому я скачал ее снова и попытался использовать digest
пакет в R для сравнения.
Два набора данных (в формате txt) можно скачать здесь .(Я знаю, что вы можете думать, что файлы небезопасны и могут содержать вирусы, но я не знаю, как создать фиктивный набор данных, чтобы воспроизвести проблему, с которой я столкнулся сейчас, поэтому я наконец-то загрузил набор данных)
И я написал небольшой скрипт, как показано ниже:
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
показываетчто все строки в ddd.old
можно найти в ddd.new
, и наоборот. line03
показывает, что столбец hash
для обоих фреймов данных является одинаковым line04
показывает, что два кадра данных различаются
Что происходит?Оба кадра данных с одинаковыми строками (от line01
и line02
), одинакового порядка (от line03
), но различны?(от line04
)
Или у меня есть какое-то недопонимание по поводу digest
?Спасибо.