---
title: "Unir Data Frames II. merge() y Reduce()"
author: "Raúl Ortiz"
date: "Monday, May 11, 2015"
output: pdf_document
---
# Mediante el presente documento, veremos unir data.frames con el comando merge().
Creamos un par de DF para usarlos en el ejemplo
```{r}
Df1 = data.frame (
Cultivo = c("Trigo", "Melocoton", "Sandia", "Tomate", "Cebada"),
Grupo = c("Cereal", "Frutal", "Horticola", "Horticola", "Cereal"))
Df2 = data.frame (
Cultivo = c("Ciruelo", "Melocoton", "Sandia", "Tomate", "Trigo"),
Agua = c("Regadio", "Regadio", "Regadio", "Regadio", "Secano"))
Df1
Df2
```
Unimos los DF mediante el comando merge()
```{r}
merge (Df1, Df2, by = "Cultivo")
merge (Df1, Df2, by = "Cultivo", sort=F)
merge (Df1, Df2, by = "Cultivo", all.x=TRUE)
```
Qué ocurre si el campo con datos comunes no tiene el mismo nombre
```{r}
Df1 = data.frame (
Cultivo = c("Cebada", "Melocoton", "Sandia", "Tomate", "Trigo"),
Grupo = c("Cereal", "Frutal", "Horticola", "Horticola", "Cereal"))
Df2 = data.frame (
Plantacion = c("Ciruelo", "Melocoton", "Sandia", "Tomate", "Trigo"),
Agua = c("Regadio", "Regadio", "Regadio", "Regadio", "Secano"))
Df1
Df2
```
Los unimos
```{r}
merge (Df1, Df2, by.x="Cultivo", by.y="Plantacion")
merge (Df1, Df2, by.x="Cultivo", by.y="Plantacion", all=T)
```
Union de tres o mas DF con el comando Reduce()
```{r}
Df3 = data.frame (
Cultivo = c("Cebada", "Melocoton", "Sandia", "Tomate", "Trigo","Ciruelo"),
Terreno = c("Abierto", "Abierto", "Invernadero", "Invernadero", "Abierto", "Abierto"))
Df3
names(Df2)[1] = "Cultivo"
Reduce(merge, list(Df1,Df2,Df3)) # Arroja un DF con datos en comunes de todos ellos
Reduce(function(...) merge (..., all=T), list(Df1,Df2,Df3)) # Resulta un DF con todos los datos
```
Por último, vemos el ejemplo con los datos del ensayo de patatas que hemos utilizado en vídeos anteriores
Establezco el directorio de trabajo
```{r}
setwd("C:/Users/Raul Ortiz/Desktop/Proyectos R")
```
Cargo los datos
```{r}
DatosTesPeso = read.table("PotatoTestigoFilOrd2Peso.csv", header=T, sep="," , dec=".")
DatosTesNr = read.table("PotatoTestigoFilOrdNr.csv", header=T, sep="," , dec=".")
DatosTesPeso
View (DatosTesNr)
```
Uno los DF
```{r}
DatosTesTotal = merge(DatosTesPeso, DatosTesNr, by = "Parcela")
DatosTesTotal
```
Las variables que se repiten tras la union tiene un sufijo que indican de qué DF provienen.
También podríamos haber hecho la unión por mas de una variable al mismo tiempo.
```{r}
DatosTesTotal2 = merge(DatosTesPeso, DatosTesNr, by = c("Parcela", "Tratamiento", "Variedad"))
DatosTesTotal2
```
Como unir dos bases de datos de una encuesta que no tiene el mismo numero de filas
ResponderEliminar