Puedes seguir el tutorial por vídeo en https://youtu.be/bovzOVZDsyA
Establezco el directorio de trabajo
setwd("~/Expression/Expression Encoder/Output/31 Odenar Data Frame II - Ordenar filas")
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.
DatosTesPeso = read.table("PotatoTestigoFilOrdPeso.csv", header=T, sep="," , dec=".")
DatosTesNr = read.table("PotatoTestigoFilOrdNr.csv", header=T, sep="," , dec=".")
DatosTesPeso
## Tratamiento Variedad Parcela Peso40 Peso41a45 Peso46a60 PesoMas61
## 1 Testigo Krone 1 380 1120 16180 2360
## 2 Testigo Krone 2 2000 1480 15600 2340
## 3 Testigo Krone 3 820 920 14840 6580
## 4 Testigo Krone 4 130 1120 17180 11780
## 5 Testigo Krone 5 1840 1240 12580 7040
## 6 Testigo Nicola 6 700 300 8810 420
## 7 Testigo Nicola 7 3340 3480 12700 680
## 8 Testigo Nicola 8 2730 1800 11080 500
## 9 Testigo Nicola 9 930 1940 11080 500
DatosTesNr
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 1 Testigo Nicola 6 12 5 63
## 2 Testigo Nicola 9 17 26 92
## 3 Testigo Nicola 8 34 37 95
## 4 Testigo Krone 5 22 16 101
## 5 Testigo Nicola 7 71 47 101
## 6 Testigo Krone 2 42 25 124
## 7 Testigo Krone 4 3 16 125
## 8 Testigo Krone 3 16 13 129
## 9 Testigo Krone 1 9 23 130
## NumeroMas61
## 1 2
## 2 2
## 3 2
## 4 30
## 5 3
## 6 14
## 7 44
## 8 28
## 9 16
¿Qué ocurre si unimos los DF tal y como están?
DatosTotal = cbind(DatosTesPeso, DatosTesNr)
DatosTotal
## Tratamiento Variedad Parcela Peso40 Peso41a45 Peso46a60 PesoMas61
## 1 Testigo Krone 1 380 1120 16180 2360
## 2 Testigo Krone 2 2000 1480 15600 2340
## 3 Testigo Krone 3 820 920 14840 6580
## 4 Testigo Krone 4 130 1120 17180 11780
## 5 Testigo Krone 5 1840 1240 12580 7040
## 6 Testigo Nicola 6 700 300 8810 420
## 7 Testigo Nicola 7 3340 3480 12700 680
## 8 Testigo Nicola 8 2730 1800 11080 500
## 9 Testigo Nicola 9 930 1940 11080 500
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 1 Testigo Nicola 6 12 5 63
## 2 Testigo Nicola 9 17 26 92
## 3 Testigo Nicola 8 34 37 95
## 4 Testigo Krone 5 22 16 101
## 5 Testigo Nicola 7 71 47 101
## 6 Testigo Krone 2 42 25 124
## 7 Testigo Krone 4 3 16 125
## 8 Testigo Krone 3 16 13 129
## 9 Testigo Krone 1 9 23 130
## NumeroMas61
## 1 2
## 2 2
## 3 2
## 4 30
## 5 3
## 6 14
## 7 44
## 8 28
## 9 16
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 poniendo las observaciones de la parcela 1 en la primera posición y el de la 9 en la úlitma, utilizaremos el siguiente comando.
DatosTesNr [order(DatosTesNr$Parcela), ]
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 9 Testigo Krone 1 9 23 130
## 6 Testigo Krone 2 42 25 124
## 8 Testigo Krone 3 16 13 129
## 7 Testigo Krone 4 3 16 125
## 4 Testigo Krone 5 22 16 101
## 1 Testigo Nicola 6 12 5 63
## 5 Testigo Nicola 7 71 47 101
## 3 Testigo Nicola 8 34 37 95
## 2 Testigo Nicola 9 17 26 92
## NumeroMas61
## 9 16
## 6 14
## 8 28
## 7 44
## 4 30
## 1 2
## 5 3
## 3 2
## 2 2
DatosTesNr1 = DatosTesNr [order(DatosTesNr$Parcela), ]
DatosTesNr # Orden del DF al cargarlo
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 1 Testigo Nicola 6 12 5 63
## 2 Testigo Nicola 9 17 26 92
## 3 Testigo Nicola 8 34 37 95
## 4 Testigo Krone 5 22 16 101
## 5 Testigo Nicola 7 71 47 101
## 6 Testigo Krone 2 42 25 124
## 7 Testigo Krone 4 3 16 125
## 8 Testigo Krone 3 16 13 129
## 9 Testigo Krone 1 9 23 130
## NumeroMas61
## 1 2
## 2 2
## 3 2
## 4 30
## 5 3
## 6 14
## 7 44
## 8 28
## 9 16
DatosTesNr1
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 9 Testigo Krone 1 9 23 130
## 6 Testigo Krone 2 42 25 124
## 8 Testigo Krone 3 16 13 129
## 7 Testigo Krone 4 3 16 125
## 4 Testigo Krone 5 22 16 101
## 1 Testigo Nicola 6 12 5 63
## 5 Testigo Nicola 7 71 47 101
## 3 Testigo Nicola 8 34 37 95
## 2 Testigo Nicola 9 17 26 92
## NumeroMas61
## 9 16
## 6 14
## 8 28
## 7 44
## 4 30
## 1 2
## 5 3
## 3 2
## 2 2
Ahora ya sí podríamos utilizar rbind()
DatosTotal = cbind(DatosTesPeso, DatosTesNr1)
DatosTotal
## Tratamiento Variedad Parcela Peso40 Peso41a45 Peso46a60 PesoMas61
## 9 Testigo Krone 1 380 1120 16180 2360
## 6 Testigo Krone 2 2000 1480 15600 2340
## 8 Testigo Krone 3 820 920 14840 6580
## 7 Testigo Krone 4 130 1120 17180 11780
## 4 Testigo Krone 5 1840 1240 12580 7040
## 1 Testigo Nicola 6 700 300 8810 420
## 5 Testigo Nicola 7 3340 3480 12700 680
## 3 Testigo Nicola 8 2730 1800 11080 500
## 2 Testigo Nicola 9 930 1940 11080 500
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 9 Testigo Krone 1 9 23 130
## 6 Testigo Krone 2 42 25 124
## 8 Testigo Krone 3 16 13 129
## 7 Testigo Krone 4 3 16 125
## 4 Testigo Krone 5 22 16 101
## 1 Testigo Nicola 6 12 5 63
## 5 Testigo Nicola 7 71 47 101
## 3 Testigo Nicola 8 34 37 95
## 2 Testigo Nicola 9 17 26 92
## NumeroMas61
## 9 16
## 6 14
## 8 28
## 7 44
## 4 30
## 1 2
## 5 3
## 3 2
## 2 2
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?
DatosTesPeso = read.table("PotatoTestigoFilOrd2Peso.csv", header=T, sep="," , dec=".")
DatosTesNr = read.table("PotatoTestigoFilOrdNr.csv", header=T, sep="," , dec=".")
DatosTesPeso
## Tratamiento Variedad Parcela Peso40 Peso41a45 Peso46a60 PesoMas61
## 1 Testigo Krone 4 130 1120 17180 11780
## 2 Testigo Krone 1 380 1120 16180 2360
## 3 Testigo Nicola 6 700 300 8810 420
## 4 Testigo Krone 3 820 920 14840 6580
## 5 Testigo Nicola 9 930 1940 11080 500
## 6 Testigo Krone 5 1840 1240 12580 7040
## 7 Testigo Krone 2 2000 1480 15600 2340
## 8 Testigo Nicola 8 2730 1800 11080 500
## 9 Testigo Nicola 7 3340 3480 12700 680
DatosTesNr
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 1 Testigo Nicola 6 12 5 63
## 2 Testigo Nicola 9 17 26 92
## 3 Testigo Nicola 8 34 37 95
## 4 Testigo Krone 5 22 16 101
## 5 Testigo Nicola 7 71 47 101
## 6 Testigo Krone 2 42 25 124
## 7 Testigo Krone 4 3 16 125
## 8 Testigo Krone 3 16 13 129
## 9 Testigo Krone 1 9 23 130
## NumeroMas61
## 1 2
## 2 2
## 3 2
## 4 30
## 5 3
## 6 14
## 7 44
## 8 28
## 9 16
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”
DatosTesNr[order(match(DatosTesNr[,3],DatosTesPeso[,3])),]
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 7 Testigo Krone 4 3 16 125
## 9 Testigo Krone 1 9 23 130
## 1 Testigo Nicola 6 12 5 63
## 8 Testigo Krone 3 16 13 129
## 2 Testigo Nicola 9 17 26 92
## 4 Testigo Krone 5 22 16 101
## 6 Testigo Krone 2 42 25 124
## 3 Testigo Nicola 8 34 37 95
## 5 Testigo Nicola 7 71 47 101
## NumeroMas61
## 7 44
## 9 16
## 1 2
## 8 28
## 2 2
## 4 30
## 6 14
## 3 2
## 5 3
DatosTesNr2 = DatosTesNr[order(match(DatosTesNr$Parcela,DatosTesPeso$Parcela)),]
DatosTesPeso
## Tratamiento Variedad Parcela Peso40 Peso41a45 Peso46a60 PesoMas61
## 1 Testigo Krone 4 130 1120 17180 11780
## 2 Testigo Krone 1 380 1120 16180 2360
## 3 Testigo Nicola 6 700 300 8810 420
## 4 Testigo Krone 3 820 920 14840 6580
## 5 Testigo Nicola 9 930 1940 11080 500
## 6 Testigo Krone 5 1840 1240 12580 7040
## 7 Testigo Krone 2 2000 1480 15600 2340
## 8 Testigo Nicola 8 2730 1800 11080 500
## 9 Testigo Nicola 7 3340 3480 12700 680
DatosTesNr2
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 7 Testigo Krone 4 3 16 125
## 9 Testigo Krone 1 9 23 130
## 1 Testigo Nicola 6 12 5 63
## 8 Testigo Krone 3 16 13 129
## 2 Testigo Nicola 9 17 26 92
## 4 Testigo Krone 5 22 16 101
## 6 Testigo Krone 2 42 25 124
## 3 Testigo Nicola 8 34 37 95
## 5 Testigo Nicola 7 71 47 101
## NumeroMas61
## 7 44
## 9 16
## 1 2
## 8 28
## 2 2
## 4 30
## 6 14
## 3 2
## 5 3
Ahora, también podríamos utilizar rbind()
DatosTotal2 = cbind(DatosTesPeso, DatosTesNr2)
DatosTotal2
## Tratamiento Variedad Parcela Peso40 Peso41a45 Peso46a60 PesoMas61
## 7 Testigo Krone 4 130 1120 17180 11780
## 9 Testigo Krone 1 380 1120 16180 2360
## 1 Testigo Nicola 6 700 300 8810 420
## 8 Testigo Krone 3 820 920 14840 6580
## 2 Testigo Nicola 9 930 1940 11080 500
## 4 Testigo Krone 5 1840 1240 12580 7040
## 6 Testigo Krone 2 2000 1480 15600 2340
## 3 Testigo Nicola 8 2730 1800 11080 500
## 5 Testigo Nicola 7 3340 3480 12700 680
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 7 Testigo Krone 4 3 16 125
## 9 Testigo Krone 1 9 23 130
## 1 Testigo Nicola 6 12 5 63
## 8 Testigo Krone 3 16 13 129
## 2 Testigo Nicola 9 17 26 92
## 4 Testigo Krone 5 22 16 101
## 6 Testigo Krone 2 42 25 124
## 3 Testigo Nicola 8 34 37 95
## 5 Testigo Nicola 7 71 47 101
## NumeroMas61
## 7 44
## 9 16
## 1 2
## 8 28
## 2 2
## 4 30
## 6 14
## 3 2
## 5 3
Otras opciones para ordenar un DF es por ejemplo en orden decreciente de una variable numérica.
DatosTesNr
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 1 Testigo Nicola 6 12 5 63
## 2 Testigo Nicola 9 17 26 92
## 3 Testigo Nicola 8 34 37 95
## 4 Testigo Krone 5 22 16 101
## 5 Testigo Nicola 7 71 47 101
## 6 Testigo Krone 2 42 25 124
## 7 Testigo Krone 4 3 16 125
## 8 Testigo Krone 3 16 13 129
## 9 Testigo Krone 1 9 23 130
## NumeroMas61
## 1 2
## 2 2
## 3 2
## 4 30
## 5 3
## 6 14
## 7 44
## 8 28
## 9 16
DatosTesNr [order(DatosTesNr$Parcela), ]
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 9 Testigo Krone 1 9 23 130
## 6 Testigo Krone 2 42 25 124
## 8 Testigo Krone 3 16 13 129
## 7 Testigo Krone 4 3 16 125
## 4 Testigo Krone 5 22 16 101
## 1 Testigo Nicola 6 12 5 63
## 5 Testigo Nicola 7 71 47 101
## 3 Testigo Nicola 8 34 37 95
## 2 Testigo Nicola 9 17 26 92
## NumeroMas61
## 9 16
## 6 14
## 8 28
## 7 44
## 4 30
## 1 2
## 5 3
## 3 2
## 2 2
DatosTesNr [rev(order(DatosTesNr$Parcela)), ]
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 2 Testigo Nicola 9 17 26 92
## 3 Testigo Nicola 8 34 37 95
## 5 Testigo Nicola 7 71 47 101
## 1 Testigo Nicola 6 12 5 63
## 4 Testigo Krone 5 22 16 101
## 7 Testigo Krone 4 3 16 125
## 8 Testigo Krone 3 16 13 129
## 6 Testigo Krone 2 42 25 124
## 9 Testigo Krone 1 9 23 130
## NumeroMas61
## 2 2
## 3 2
## 5 3
## 1 2
## 4 30
## 7 44
## 8 28
## 6 14
## 9 16
DatosTesNr [order(-DatosTesNr$Parcela), ]
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 2 Testigo Nicola 9 17 26 92
## 3 Testigo Nicola 8 34 37 95
## 5 Testigo Nicola 7 71 47 101
## 1 Testigo Nicola 6 12 5 63
## 4 Testigo Krone 5 22 16 101
## 7 Testigo Krone 4 3 16 125
## 8 Testigo Krone 3 16 13 129
## 6 Testigo Krone 2 42 25 124
## 9 Testigo Krone 1 9 23 130
## NumeroMas61
## 2 2
## 3 2
## 5 3
## 1 2
## 4 30
## 7 44
## 8 28
## 6 14
## 9 16
También la puedo ordenar según el orden de dos variables, una tipo Factor y otra tipo numérica
DatosTesNr
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 1 Testigo Nicola 6 12 5 63
## 2 Testigo Nicola 9 17 26 92
## 3 Testigo Nicola 8 34 37 95
## 4 Testigo Krone 5 22 16 101
## 5 Testigo Nicola 7 71 47 101
## 6 Testigo Krone 2 42 25 124
## 7 Testigo Krone 4 3 16 125
## 8 Testigo Krone 3 16 13 129
## 9 Testigo Krone 1 9 23 130
## NumeroMas61
## 1 2
## 2 2
## 3 2
## 4 30
## 5 3
## 6 14
## 7 44
## 8 28
## 9 16
DatosTesNr [order(DatosTesNr$Variedad,DatosTesNr$Numero40), ]
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 7 Testigo Krone 4 3 16 125
## 9 Testigo Krone 1 9 23 130
## 8 Testigo Krone 3 16 13 129
## 4 Testigo Krone 5 22 16 101
## 6 Testigo Krone 2 42 25 124
## 1 Testigo Nicola 6 12 5 63
## 2 Testigo Nicola 9 17 26 92
## 3 Testigo Nicola 8 34 37 95
## 5 Testigo Nicola 7 71 47 101
## NumeroMas61
## 7 44
## 9 16
## 8 28
## 4 30
## 6 14
## 1 2
## 2 2
## 3 2
## 5 3
Si quiero que una de las variables se ordene de forma decreciente, puedo recurrir el signo “-”
DatosTesNr [order(DatosTesNr$Variedad,-DatosTesNr$Numero40), ]
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 6 Testigo Krone 2 42 25 124
## 4 Testigo Krone 5 22 16 101
## 8 Testigo Krone 3 16 13 129
## 9 Testigo Krone 1 9 23 130
## 7 Testigo Krone 4 3 16 125
## 5 Testigo Nicola 7 71 47 101
## 3 Testigo Nicola 8 34 37 95
## 2 Testigo Nicola 9 17 26 92
## 1 Testigo Nicola 6 12 5 63
## NumeroMas61
## 6 14
## 4 30
## 8 28
## 9 16
## 7 44
## 5 3
## 3 2
## 2 2
## 1 2
Por último, también se puede ordenar con comandos de la librería dplyr
library(dplyr)
##
## Attaching package: 'dplyr'
##
## The following objects are masked from 'package:stats':
##
## filter, lag
##
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
DatosTesNr %>% arrange(Parcela)
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 1 Testigo Krone 1 9 23 130
## 2 Testigo Krone 2 42 25 124
## 3 Testigo Krone 3 16 13 129
## 4 Testigo Krone 4 3 16 125
## 5 Testigo Krone 5 22 16 101
## 6 Testigo Nicola 6 12 5 63
## 7 Testigo Nicola 7 71 47 101
## 8 Testigo Nicola 8 34 37 95
## 9 Testigo Nicola 9 17 26 92
## NumeroMas61
## 1 16
## 2 14
## 3 28
## 4 44
## 5 30
## 6 2
## 7 3
## 8 2
## 9 2
DatosTesNr %>% arrange(Variedad,Numero40)
## Tratamiento Variedad Parcela Numero40 Numero41a45 Numero46a60
## 1 Testigo Krone 4 3 16 125
## 2 Testigo Krone 1 9 23 130
## 3 Testigo Krone 3 16 13 129
## 4 Testigo Krone 5 22 16 101
## 5 Testigo Krone 2 42 25 124
## 6 Testigo Nicola 6 12 5 63
## 7 Testigo Nicola 9 17 26 92
## 8 Testigo Nicola 8 34 37 95
## 9 Testigo Nicola 7 71 47 101
## NumeroMas61
## 1 44
## 2 16
## 3 28
## 4 30
## 5 14
## 6 2
## 7 2
## 8 2
## 9 3