Encuentra diferencias entre objetos de R con {waldo}
{waldo} es un paquete de R para encontrar diferencias entre objetos y conjuntos de datos.
Creemos dos vectores de datos de ejemplo:
vector_a <- c("a", "b", "c", "d", "e")
vector_b <- c("a", "b", "c", "f")
Si los comparamos con la función all.equal(), de R base, obtenemos un resultado poco informativo:
# comparar con base
all.equal(vector_a, vector_b)
[1] "Lengths (5, 4) differ (string compare on first 4)"
[2] "1 string mismatch"
Básicamente nos dice “son distintos” 🤨
Pero si usamos waldo::compare(), obtenemos una comparación ordenada y clara de las diferencias:
# comparar con waldo
waldo::compare(vector_a, vector_b)
Se nos informa con color de las diferencias en los datos.
Probemos con otro ejemplo simple de vectores similares:
vector_c <- c("a", "b", "c", "d")
vector_d <- c("d", "b", "c", "a")
waldo::compare(vector_c, vector_d)
La comparación destaca las diferencias de posición entre ambos vectores.
Desordenemos y ensuciemos un dataframe con ayuda del
paquete {messy}, de Nicola Rennie, para compararlo con su versión original:
iris_b <- iris |> messy::messy()
compare(iris, iris_b)
Las diferencias son tantas que indica que las variables son de tipo distinto, y muestra sus primeras observaciones.
Hagamos otra verión sucia de iris para comparar ambos dataframe sucios:
iris_c <- iris |> messy::messy()
compare(head(iris_b), head(iris_c))
En este caso te muestra las filas de ambas tablas intercaladas, para que se vean las diferencias, y luego muestra las columnas con los primeros valores distintos.
Hagamos otro par de versiones sucias, pero ahora que sólo difieran en su cantidad de datos perdidos o missing:
iris_c <- iris |> messy::make_missing()
iris_d <- iris |> messy::make_missing()
compare(iris_c, iris_d)
En este caso, va destacando las diferencias entre ambos dataframes, indicando con color sus cambios y la cantidad extra de cambios que hay.
Para terminar, veamos un ejemplo más práctico: acá hay dos tablas de datos con muchas columnas, todas con nombres levemente distintos. Es una situación que pasa mucho cuando nos encontramos con datos cuyas columnas son solamente ids de variables que luego hay que ir a buscar a un diccionario de datos, y que por lo tanto tienen nombres muy parecidos 😣
| var_ead32 | var_efe23 | var_eea31 | var_edr52 | var_ead30 | var_eae31 |
|---|---|---|---|---|---|
| 0.9629587 | 0.186854 | 0.743411 | 0.1829925 | 0.3855037 | 0.0135598 |
| var_ead32 | var_efe23 | var_eae31 | var_ede52 | var_ead30 | var_eae30 |
|---|---|---|---|---|---|
| 0.2636705 | 0.3516496 | 0.8207743 | 0.4509701 | 0.3146321 | 0.1663455 |
Así a la rápida es casi imposible saber si las columnas son las mismas, o si no lo son, cuáles sobran y cuáles faltan! 😭
compare(tabla_a, tabla_b)
Así podemos ver claramente que hay tres columnas distintas entre ambas tablas, y cuáles son, en vez de partirnos la cabeza y los ojos comparando nombres de columnas 🤓
- Fecha de publicación:
- November 10, 2025
- Extensión:
- 2 minute read, 422 words