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.
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.
NULLhereda el perfil deperfil, 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
