He creado un conjunto de datos usando WHO ATC/DDD Index unos meses antes y quiero asegurarme de que la base de datos en línea permanezca sin cambios hoy, así que la descargué nuevamente y traté de usar el paquete digest
en R para hacer la comparación.usando hash para determinar si 2 dataframes son idénticos (PARTE 01)
Los dos conjuntos de datos (en formato txt) se pueden descargar here. (Soy consciente de que puede pensar que los archivos no son seguros y pueden tener virus, pero no sé cómo generar un conjunto de datos ficticio para replicar el problema que tengo ahora, así que cargo el conjunto de datos finalmente)
y yo han escrito un pequeño script de la siguiente manera:
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"]),]
y algo realmente interesante sucede cuando lo haga la comprobación:
> 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
yline02
muestra que cada filas i nddd.old
se puede encontrar enddd.new
, y viceversa.line03
muestra que la columnahash
para ambos trama de datos son los mismosline04
muestra que los dos son diferentes trama de datos
Qué ocurre? Ambos dataframe con las filas idénticas (desde line01
y line02
), mismo orden (desde line03
), pero son diferentes? (desde line04
)
¿O tengo algún malentendido sobre digest
? Gracias.
Puede usar 'all.equal (ddd.old, ddd.new)' para verificar diferencias. – Marek