Dpto. de Fundamentos del Análisis Económico. Universidad de Alicante
Analizar datos suele implicar múltiples tablas
diferentes orígenes: ej., dptos. de empresa (personal, ventas, almacén)
almacenamiento más eficiente: elementos “similares” dentro de una tabla y diferentes entre ellas
Para poder combinar la información los datos deben ser relacionales: cada par de tablas están relacionadas mediante identificadores llamados claves
nycflights13
contiene varias tablas: el nombre de la compañía está “codificado” en flights
y se puede encontrar en airlines
carrier
Tipos de claves:
Primaria (o interna): identifican de forma única cada observación en una tabla. Puede ser una sola variable (en planes
) o múltiples (en weather
)
Secundaria (o externa): señala a la clave primaria de otra tabla
Una clave primaria y una externa (asociada) en otra tabla forman una relación:
Operaciones que se pueden realizar con dos tablas: uniones de transformación, uniones de filtro y operaciones de conjunto
Añaden nuevas variables a una tabla desde filas coincidentes en otra.
cbind()
o bind_columns()
: nuevas columnas para filas en el mismo ordenby
: ¿Cómo se emparejan las tablas?by = "varX"
o, para varias, con by = c("varX", "varY")
Si se omite el argumento by
, se usan todas las variables en común. Esto no siempre es deseable: ej., año no es lo mismo en flights
y planes
Columnas con el mismo nombre (ej., año) se desambigúan con un sufijo
by = c("x1" = "y1", "x2" = "y2")
para emparejar la variable x1
en la primera tabla con la variable y1
en la segunda, y la variable x2
con y2
inner_join(x, y)
sólo incluye observaciones que coincidan en x
y y
.Cuando una fila no coincide en una unión externa, las nuevas variables se rellenan como valores ausentes
left_join(df1, df2)
: mantiene todas las observaciones en x
, coincidan o no con la de y
right_join(df1, df2)
: mantiene todas las observaciones en y
full_join(df1, df2)
: incluye todas las observaciones de x
e y
Filtra las observaciones de la tabla de la izquierda basándose en si coinciden o no con una observación de la otra tabla
Se tiene un subconjunto de las filas de la tabla de la izquierda
filter()
, con tablas previamente resumidas, pero permiten filtrados complejos fácilmenteTrabajan con filas completas, comparando valores de cada variable.
Esperan que x
e y
tengan las mismas variables, y tratan las observaciones (filas) como elementos de un conjunto.
Útil cuando se quiere dividir un filtro complejo en piezas más simples.
df1 <- tibble(x = 1:2, y = c(1, 1))
df2 <- tibble(x = c(1,1), y = 1:2)
intersect(df1, df2) # solo filas tanto en df1 como en df2
union(df1, df2) # filas únicas en ambas tablas df1 y df2`
union_all(df1, df2) # todas las filas de df1 y df2, manteniendo duplicados
setdiff(df1, df2) # filas en df1, pero no en df2
setdiff(df2, df1)