Skip to contents

Busca primero claves simples y luego combinaciones mínimas de dos o tres columnas. No prueba una combinación si ya contiene una clave candidata más pequeña. Una clave exige ausencia de NA y unicidad en todas las filas. Además informa columnas simples casi-clave cuando tienen al menos 100 filas, al menos el 90 % de sus valores son distintos y un único valor concentra al menos la mitad de los duplicados excedentes. La concentración evita confundir texto libre de alta cardinalidad, con muchas colisiones dispersas, con una clave dañada. Las variables con rol propuesto fecha, incluidas fecha-hora, no se consideran casi-claves. Los vectores double sólo son candidatos si ninguno de sus valores finitos tiene parte fraccionaria. Esto conserva identificadores enteros importados desde archivos de texto y excluye importes, coordenadas y otras medidas. Los vectores integer64 se tratan como enteros semánticos.

Usage

detectar_claves(datos, max_combinacion = 3, normalizar = NULL, perfil = NULL)

Arguments

datos

Objeto que hereda de data.frame.

max_combinacion

Máximo de columnas por combinación, entre 1 y 3.

normalizar

Perfil de comparación. NULL hereda el perfil de perfil, pero las claves se siguen descubriendo por identidad exacta.

perfil

Perfil producido por perfilar() para heredar la comparación.

Value

Data frame de claves candidatas y casi-claves con las columnas combinadas, cantidad de columnas, marcas de redundancia, casi_clave, unicidad_exacta y unicidad_normalizada. Las columnas de colisiones publican sus valores, frecuencias y la concentración observada. Las claves exactas conservan casi_clave = FALSE; una fila con casi_clave = TRUE es un diagnóstico que requiere corregir o confirmar, no una clave válida.

Details

Dos claves simples se marcan como redundantes cuando sus contenidos son idénticos —incluidas clase, atributos, ausencias y representación exacta—, aunque tengan nombres distintos. Las columnas compuestas —matrices o arreglos de más de una dimensión— y las de lista no se interpretan como claves. Los pares también quedan en el atributo claves_redundantes.

Una columna cuyo nombre se repite en la tabla no se analiza: una clave se publica por el nombre de sus columnas, y ese nombre no diría cuál de las dos identifica. Se avisa, y los nombres quedan en el atributo columnas_nombre_repetido.

Examples

detectar_claves(data.frame(id = 1:4, grupo = c("a", "a", "b", "b")))
#>   columnas n_columnas n_filas redundante equivalente_a casi_clave
#> 1       id          1       4      FALSE                    FALSE
#>   unicidad_exacta unicidad_normalizada n_distintos_exactos
#> 1            TRUE                 TRUE                   4
#>   n_distintos_normalizados n_valores_colisionados n_filas_en_colision
#> 1                        4                      0                   0
#>   n_duplicados_excedentes concentracion_colisiones colisiones
#> 1                       0                       NA