Puedes seguir el tutorial por vídeo en https://youtu.be/0Ar3oIpyVt8
Establezco el directorio de trabajo
setwd("~/Expression/Expression Encoder/Output/30 Odenar Data Frame I - Ordenar columnas")
En el vídeo como “Unir Data Frames” vimos que para utilizar el comando rbind(), uno de los requisitos era que las columnas o variables de los DF que íbamos a unir, tuvieran los mismos nombres y en el v?deo “Renombrar variables” aprendimos a cambiar los nombres para facilitar este proceso. Dije también en el vídeo que otro de los requisitos para utilizar el comando rbind() es que las columnas están ordenados de la misma manera, pero vamos a ver si esto es así o no.
DatosTesPeso = read.table("PotatoTestigoPeso.csv", header=T, sep="," , dec=".")
DatosTdoPeso = read.table("PotatoTratadoPeso3.csv", header=T, sep="," , dec=".")
names (DatosTesPeso)
## [1] "Tratamiento" "Variedad" "Parcela" "Peso40" "Peso41a45"
## [6] "Peso46a60" "PesoMas61"
names (DatosTdoPeso)
## [1] "Parcela" "Variedad" "Tratamiento" "PesoMas61" "Peso46a60"
## [6] "Peso41a45" "Peso40"
Los nombres de las variables son los mismos, pero no el orden en el que se presentan. Veamos que pasa cuando ejecutamos rbind() en estas condiciones.
DatosPesos = rbind(DatosTesPeso, DatosTdoPeso)
DatosPesos
## 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
## 10 Tratado Krone 10 700 880 19120 3060
## 11 Tratado Krone 11 440 680 5880 740
## 12 Tratado Krone 12 1900 3620 12380 620
## 13 Tratado Krone 13 1300 2100 12780 1240
## 14 Tratado Krone 14 620 1620 12940 840
## 15 Tratado Nicola 15 630 1440 16510 1600
## 16 Tratado Nicola 16 1120 3430 14700 490
## 17 Tratado Nicola 17 2120 2690 13850 220
## 18 Tratado Nicola 18 2600 6720 14340 0
Comprobamos que R ha identificado los nombres de las variables o columnas y los ha reordenado para que coincidan, antes de unirlos. En caso de que por cualquier motivo queramos dar un orden específico al DF, tenemos varias opciones.
Opción 1 Ordenar por el número de índice de las columnas. - Ya hablamos de los índices en el vídeo “Filtrar datos I”
names (DatosTesPeso)
## [1] "Tratamiento" "Variedad" "Parcela" "Peso40" "Peso41a45"
## [6] "Peso46a60" "PesoMas61"
names (DatosTdoPeso)
## [1] "Parcela" "Variedad" "Tratamiento" "PesoMas61" "Peso46a60"
## [6] "Peso41a45" "Peso40"
DatosTdoPeso1 = DatosTdoPeso [ , c(3,2,1,7,6,5,4)]
names (DatosTdoPeso1)
## [1] "Tratamiento" "Variedad" "Parcela" "Peso40" "Peso41a45"
## [6] "Peso46a60" "PesoMas61"
Opción 2 Utilizar la función subset() - Ya hablamos de este comando en el vídeo “Filtrar datos II”
DatosTdoPeso2 = subset (DatosTdoPeso, select=c(3,2,1,7,6,5,4))
names (DatosTdoPeso2)
## [1] "Tratamiento" "Variedad" "Parcela" "Peso40" "Peso41a45"
## [6] "Peso46a60" "PesoMas61"
Opción 3 Utilizar la función del paquete dplyr - Ya hablamos de este comando en el vídeo “Filtrar datos III”
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
DatosTdoPeso3 = DatosTdoPeso %>% select(Tratamiento, Variedad, Parcela, Peso40, Peso41a45, Peso46a60, PesoMas61)
names (DatosTdoPeso3)
## [1] "Tratamiento" "Variedad" "Parcela" "Peso40" "Peso41a45"
## [6] "Peso46a60" "PesoMas61"
Opción 4 Utilizamos el orden de las variables o columnas del Data Frame referencia, para ordenar el DF objetivo.
DatosTdoPeso4 = DatosTdoPeso [ , c(names(DatosTesPeso))]
names (DatosTdoPeso4)
## [1] "Tratamiento" "Variedad" "Parcela" "Peso40" "Peso41a45"
## [6] "Peso46a60" "PesoMas61"
Si en vez de ordenar las columnas, según el orden establecido en otro DF, queremos hacerlo en orden alfabético.
DatosTdoPesoAZ = DatosTdoPeso [ , order(c(names(DatosTdoPeso)))]
names (DatosTdoPesoAZ)
## [1] "Parcela" "Peso40" "Peso41a45" "Peso46a60" "PesoMas61"
## [6] "Tratamiento" "Variedad"
En orden alfabético inverso.
DatosTdoPesoZA = DatosTdoPeso [ , rev(order(c(names(DatosTdoPeso))))]
names (DatosTdoPesoZA)
## [1] "Variedad" "Tratamiento" "PesoMas61" "Peso46a60" "Peso41a45"
## [6] "Peso40" "Parcela"