Mostrando entradas con la etiqueta Producto cartesiano. Mostrar todas las entradas
Mostrando entradas con la etiqueta Producto cartesiano. Mostrar todas las entradas

2016-07-25

Crear el producto cartesiano o combinación cruzada de dos tablas en Ms Access

Title

Problema

Nos proponemos crear el producto cartesiano de dos tablas en Ms Access, todas las posibles combinaciones de dos tablas (cross join o combinación cruzada). En nuestro ejemplo, asignar a cada país un listado de 3 productos.

Solución

  1. Creamos una consulta, añadimos las dos tablas sin crear una combinación entre ellas (por eso ninguna línea une las tablas), y los campos deseados.
  2. Ejecutamos la consulta.

Resultados

Habremos asignado a cada país el listado de 3 productos, con su ID, producto y cantidad.

Notas

El producto cartesiano o combinación cruzada son muy útiles en ejemplos específicos como el anterior, ahorrándonos un tiempo precioso en lo que, de otra manera, deberíamos crear copiando y pegando quizá miles de veces. No obstante, este tipo de consultas puede potencialmente crear un enorme número de filas como resultado y tardar mucho tiempo en ejecutarse. Por tanto, debemos ser conscientes de nuestro propósito para no obtener resultados sin sentido y ralentizar el tiempo de ejecución.

Entradas relacionadas

2015-07-18

Generar todas las combinaciones posibles —producto cartesiano— en R

Title

Problema

Queremos obtener el producto cartesiano, todas las combinaciones posibles de varios vectores.

Solución

Además de los siguientes ejemplos puedes ver más en entradas relacionadas.

Dos vectores

  • expand.grid
  • expand.grid(1:5, 1:5)
    
  • merge
  • merge(1:5, 1:5)
    
  • Cross join con sqldf
  • library(sqldf)
    df1 <- data.frame(a = 1:5)
    df2 <- df1
    sqldf("SELECT df1.a, df2.a FROM df1 
          CROSS JOIN df2")
    
  • Resultado
  •    x y
    1  1 1
    2  2 1
    3  3 1
    4  4 1
    5  5 1
    6  1 2
    7  2 2
    8  3 2
    9  4 2
    10 5 2
    11 1 3
    12 2 3
    13 3 3
    14 4 3
    15 5 3
    16 1 4
    17 2 4
    18 3 4
    19 4 4
    20 5 4
    21 1 5
    22 2 5
    23 3 5
    24 4 5
    25 5 5
    
Más de dos vectores

  • expand.grid.
  • a <- c('europe', 'asia')
    b <- c('co2', 'temperature')
    c <- c('min', 'max')
    expand.grid(a, b, c)
    
        Var1        Var2 Var3
    1 europe         co2  min
    2   asia         co2  min
    3 europe temperature  min
    4   asia temperature  min
    5 europe         co2  max
    6   asia         co2  max
    7 europe temperature  max
    8   asia temperature  max
    

Entradas relacionadas

Referencias

Nube de datos