Mostrando entradas con la etiqueta dplyr. Mostrar todas las entradas
Mostrando entradas con la etiqueta dplyr. Mostrar todas las entradas

lunes, 11 de mayo de 2015

ORDENAR DATA FRAME II. Ordenar filas



---
title: "Ordenar Data Frame II - Ordenar filas"
author: "Raúl Ortiz"
date: "Tuesday, May 05, 2015"
output: pdf_document
---

# Mediante el presente documento, veremos como reordenar las filas de un Data Frame.

Establezco el directorio de trabajo
```{r}
setwd("C:/Users/Raul Ortiz/Desktop/Proyectos R")
```
En el vídeo como "Unir Data Frames" vimos que para utilizar el comando cbind(), uno de los requisitos era que las filas de los DF que íbamos a unir estuvieran en el mismo orden.
Veamos que pasa si no están en el mismo orden.
```{r}
DatosTesPeso = read.table("PotatoTestigoFilOrdPeso.csv", header=T, sep="," , dec=".")
DatosTesNr = read.table("PotatoTestigoFilOrdNr.csv", header=T, sep="," , dec=".")
DatosTesPeso
View (DatosTesNr)
```
¿Qué orurre si unimos los DF tal y como están?
```{r}
DatosTotal = cbind(DatosTesPeso, DatosTesNr)
View (DatosTotal)
```
Los mas lógico parece ordenar el DF "DatosTesNr"" para que el orden de las observaciones coincida con el de las parcelas, tal y como ocurre en el DF "DatosTesPeso".
Para ordenar el DF siguiendo poniendo las observaciones de la parcela 1 en la primera posición y el de la 9 en la úlitma, utilizaremos el siguiente comando.
```{r}
DatosTesNr [order(DatosTesNr$Parcela), ]
DatosTesNr1 = DatosTesNr [order(DatosTesNr$Parcela), ]
DatosTesNr # Orden del DF al cargarlo
View (DatosTesNr1)
```
Ahora ya sí podríamos utilizar rbind()
```{r}
DatosTotal = cbind(DatosTesPeso, DatosTesNr1)
View (DatosTotal)
```
Este era un ejemplo fácil, porque el DF de referencia estaba ordenado según el orden creciente (del 1 al 9) de una variable numérica.
¿Cómo lo haríamos si la variable "Parcela" del DF de referencia no estuviera ordenado de forma creciente?
```{r}
DatosTesPeso = read.table("PotatoTestigoFilOrd2Peso.csv", header=T, sep="," , dec=".")
DatosTesNr = read.table("PotatoTestigoFilOrdNr.csv", header=T, sep="," , dec=".")
DatosTesPeso
View (DatosTesNr)
```
Ninguno de los DF está ordenado de la misma manera.
Vamos a ordenar el DF "DatosTesNr" según el orden de parcela que tiene el DF "DatosTesPeso"
```{r}
DatosTesNr[order(match(DatosTesNr[,3],DatosTesPeso[,3])),]
DatosTesNr2 = DatosTesNr[order(match(DatosTesNr$Parcela,DatosTesPeso$Parcela)),]

DatosTesPeso
View (DatosTesNr2)
```
Ahora, también podríamos utilizar rbind()
```{r}
DatosTotal2 = cbind(DatosTesPeso, DatosTesNr2)
View (DatosTotal2)
```
Otras opciones para ordenar un DF es por ejemplo en orden decreciente de una variable numérica.
```{r}
DatosTesNr
DatosTesNr [order(DatosTesNr$Parcela), ]
DatosTesNr [rev(order(DatosTesNr$Parcela)), ]
DatosTesNr [order(-DatosTesNr$Parcela), ]
```
También la puedo ordenar según el orden de dos variables, una tipo Factor y otra tipo numérica
```{r}
DatosTesNr
DatosTesNr [order(DatosTesNr$Variedad,DatosTesNr$Numero40), ]
```
Si quiero que una de las variables se ordene de forma decreciente, puedo recurrir el signo "-"
```{r}
DatosTesNr [order(DatosTesNr$Variedad,-DatosTesNr$Numero40), ]
```
Por último, también se puede ordenar con comandos de la librería dplyr
```{r}
library(dplyr)
DatosTesNr %>% arrange(Parcela)
DatosTesNr %>% arrange(Variedad,Numero40)
```

SELECCIONAR DATOS III


#######################################################
###   Filtrar datos por filas o columnas de un DF   ###
#######################################################

# Establezco el directorio de trabajo
setwd("C:/Users/Raul Ortiz/Desktop/Proyectos R")

# Importo los datos
Datos = read.table("Potato.csv", header=T, sep="," , dec=".")

# Verifico los datos cargados
head (Datos)    # Verifico los primeros datos
str(Datos)      # Compruebo la estructura.
summary(Datos)  # Veo resumen de datos

######################################################################
###   Seleccionar datos del dataframe, usando libreria - dplyr -   ###
######################################################################

library(dplyr) # Si es la primera vez que la usas, antes tendras que instalar el paquete (menu Tools).

filter (Datos, Variedad=="Krone") # La estructura es igual que subset.

select (Datos, Tratamiento, Variedad, Weightto40, Weight41to45, Weight46to60, Weight61on)

select (Datos, Tratamiento, Variedad, contains ("Weight"))

select (Datos, Tratamiento, Variedad, ends_with ("61on"))

?select

### Encadenando ordenes con - %>% - que se puede leer como - entonces... -

# Sin encadenar
filter (select (Datos, Tratamiento, Variedad), Tratamiento=="UTC")
# Filtra seleccionando en el DF Datos las variables Tratamiento y Variedad, cuando Tratamiento sea igual UTC

# Encadenando
Datos %>% select (Tratamiento, Variedad) %>% filter (Tratamiento=="UTC")
# Trabaja con el DF Datos, despues seleciona las variables Tratamiento y Variedad, y despues las filtras