En este tutorial, aprenderá
- Seleccione()
- Filtrar()
- Tubería
- arreglar()
La biblioteca llamada dplyr contiene verbos valiosos para navegar dentro del conjunto de datos. A través de este tutorial, utilizará el conjunto de datos de tiempos de viaje. El conjunto de datos recopila información sobre los viajes que realiza un conductor entre su casa y su lugar de trabajo. Hay catorce variables en el conjunto de datos, que incluyen:
- DayOfWeek: identifica el día de la semana en que el conductor usa su automóvil
- Distancia: la distancia total del viaje
- MaxSpeed: la velocidad máxima del viaje
- TotalTime: la duración en minutos del viaje
El conjunto de datos tiene alrededor de 200 observaciones en el conjunto de datos, y los paseos ocurrieron de lunes a viernes.
Primero que nada, necesitas:
- cargar el conjunto de datos
- comprobar la estructura de los datos.
Una característica útil de dplyr es la función glimpse (). Esta es una mejora con respecto a str (). Podemos usar glimpse () para ver la estructura del conjunto de datos y decidir qué manipulación se requiere.
library(dplyr)PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv"df <- read.csv(PATH)glimpse(df)
Producción:
## Observations: 205## Variables: 14## $ X1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,… ## $ Date 1/6/2012, 1/6/2012, 1/4/2012, 1/4/2012, 1/3/20… ## $ StartTime 16:37, 08:20, 16:17, 07:53, 18:57, 07:57, 17:3… ## $ DayOfWeek Friday, Friday, Wednesday, Wednesday, Tuesday,… ## $ GoingTo Home, GSK, Home, GSK, Home, GSK, Home, GSK, GS… ## $ Distance 51.29, 51.63, 51.27, 49.17, 51.15, 51.80, 51.37… ## $ MaxSpeed 127.4, 130.3, 127.4, 132.3, 136.2, 135.8, 123.2… ## $ AvgSpeed 78.3, 81.8, 82.0, 74.2, 83.4, 84.5, 82.9, 77.5,… ## $ AvgMovingSpeed 84.8, 88.9, 85.8, 82.9, 88.1, 88.8, 87.3, 85.9,… ## $ FuelEconomy , , , , , , -, -, 8.89, 8.89, 8.89, 8.89, 8.89… ## $ TotalTime 39.3, 37.9, 37.5, 39.8, 36.8, 36.8, 37.2, 37.9,… ## $ MovingTime 36.3, 34.9, 35.9, 35.6, 34.8, 35.0, 35.3, 34.3,… ## $ Take407All No, No, No, No, No, No, No, No, No, No, No, No… ## $ Comments , , , , , , , , , , , , , , , Put snow tires o…
Esto es obvio que la variable Comentarios necesita más diagnóstico. Las primeras observaciones de la variable Comentarios son solo valores perdidos.
sum(df$Comments =)
Explicación del código
- sum (df $ Comentarios == ""): Suma las observaciones iguales a "" en los comentarios de la columna de df
Producción:
## [1] 181
Seleccione()
Comenzaremos con el verbo select (). No necesariamente necesitamos todas las variables, y una buena práctica es seleccionar solo las variables que considere relevantes.
Tenemos 181 observaciones faltantes, casi el 90 por ciento del conjunto de datos. Si decide excluirlos, no podrá continuar con el análisis.
La otra posibilidad es eliminar la variable Comment con el verbo select ().
Podemos seleccionar variables de diferentes formas con select (). Tenga en cuenta que el primer argumento es el conjunto de datos.
- `select(df, A, B ,C)`: Select the variables A, B and C from df dataset.- `select(df, A:C)`: Select all variables from A to C from df dataset.- `select(df, -C)`: Exclude C from the dataset from df dataset.
Puede utilizar la tercera forma de excluir la variable Comentarios.
step_1_df <- select(df, -Comments)dim(df)
Producción:
## [1] 205 14
dim(step_1_df)
Producción:
## [1] 205 13
El conjunto de datos original tiene 14 características, mientras que step_1_df tiene 13.
Filtrar()
El verbo filter () ayuda a mantener las observaciones siguiendo un criterio. El filtro () funciona exactamente como select (), primero pasa el marco de datos y luego una condición separada por una coma:
filter(df, condition)arguments:- df: dataset used to filter the data- condition: Condition used to filter the data
Un criterio
En primer lugar, puede contar el número de observaciones dentro de cada nivel de una variable de factor.
table(step_1_df$GoingTo)
Explicación del código
- table (): cuenta el número de observaciones por nivel. Tenga en cuenta que solo se aceptan variables de nivel de factor
- table (step_1_df $ GoingTo): Cuente el número de viajes hacia el destino final.
Producción:
#### GSK Home## 105 100
La tabla de funciones () indica que 105 viajes van a GSK y 100 a casa.
Podemos filtrar los datos para devolver un conjunto de datos con 105 observaciones y otro con 100 observaciones.
# Select observationsif GoingTo == Homeselect_home <- filter(df, GoingTo == "Home")dim(select_home)
Producción:
## [1] 100 14
# Select observationsif GoingTo == Workselect_work <- filter(df, GoingTo == "GSK")dim(select_work)
Producción:
## [1] 105 14
Criterios múltiples
Podemos filtrar un conjunto de datos con más de un criterio. Por ejemplo, puede extraer las observaciones donde el destino es el hogar y ocurrió un miércoles.
select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday")dim(select_home_wed)
Producción:
## [1] 23 14
23 observaciones coincidieron con este criterio.
Tubería
La creación de un conjunto de datos requiere muchas operaciones, como:
- importador
- fusionando
- seleccionando
- filtración
- etcétera
La biblioteca dplyr viene con un operador práctico,%>%, llamado canalización . La función de canalización hace que la manipulación sea limpia, rápida y menos propensa a errores.
Este operador es un código que realiza pasos sin guardar pasos intermedios en el disco duro. Si vuelve a nuestro ejemplo anterior, puede seleccionar las variables de interés y filtrarlas. Tenemos tres pasos:
- Paso 1: Importar datos: importar los datos del gps
- Paso 2: Seleccione los datos: seleccione GoingTo y DayOfWeek
- Paso 3: Filtrar datos: volver solo a casa y miércoles
Podemos usar la forma más difícil de hacerlo:
# Step 1step_1 <- read.csv(PATH)# Step 2step_2 <- select(step_1, GoingTo, DayOfWeek)# Step 3step_3 <- filter(step_2, GoingTo == "Home", DayOfWeek == "Wednesday")head(step_3)
Producción:
## GoingTo DayOfWeek## 1 Home Wednesday## 2 Home Wednesday## 3 Home Wednesday## 4 Home Wednesday## 5 Home Wednesday## 6 Home Wednesday
Esa no es una forma conveniente de realizar muchas operaciones, especialmente en una situación con muchos pasos. El entorno termina con muchos objetos almacenados.
Usemos el operador de canalización%>% en su lugar. Solo necesitamos definir el marco de datos utilizado al principio y todo el proceso fluirá de él.
Sintaxis básica de la canalización
New_df <- df %>%step 1 %>%step 2 %>%… arguments- New_df: Name of the new data frame- df: Data frame used to compute the step- step: Instruction for each step- Note: The last instruction does not need the pipe operator `%`, you don't have instructions to pipe anymoreNote: Create a new variable is optional. If not included, the output will be displayed in the console.
Puede crear su primera tubería siguiendo los pasos enumerados anteriormente.
# Create the data frame filter_home_wed.It will be the object return at the end of the pipelinefilter_home_wed <-#Step 1read.csv(PATH) % > %#Step 2select(GoingTo, DayOfWeek) % > %#Step 3filter(GoingTo == "Home",DayOfWeek == "Wednesday")identical(step_3, filter_home_wed)
Producción:
## [1] TRUE
Estamos listos para crear un impresionante conjunto de datos con el operador de la tubería.
arreglar()
En el tutorial anterior, aprenderá a ordenar los valores con la función sort (). La biblioteca dplyr tiene su función de clasificación. Funciona a las mil maravillas con la tubería. El verbo organizar () puede reordenar una o varias filas, ya sea ascendente (predeterminado) o descendente.
- `arrange(A)`: Ascending sort of variable A- `arrange(A, B)`: Ascending sort of variable A and B- `arrange(desc(A), B)`: Descending sort of variable A and ascending sort of B
Podemos ordenar la distancia por destino.
# Sort by destination and distancestep_2_df <-step_1_df %>%arrange(GoingTo, Distance)headProducción:
## X Date StartTime DayOfWeek GoingTo Distance MaxSpeed AvgSpeed## 1 193 7/25/2011 08:06 Monday GSK 48.32 121.2 63.4## 2 196 7/21/2011 07:59 Thursday GSK 48.35 129.3 81.5## 3 198 7/20/2011 08:24 Wednesday GSK 48.50 125.8 75.7## 4 189 7/27/2011 08:15 Wednesday GSK 48.82 124.5 70.4## 5 95 10/11/2011 08:25 Tuesday GSK 48.94 130.8 85.7## 6 171 8/10/2011 08:13 Wednesday GSK 48.98 124.8 72.8## AvgMovingSpeed FuelEconomy TotalTime MovingTime Take407All## 1 78.4 8.45 45.7 37.0 No## 2 89.0 8.28 35.6 32.6 Yes## 3 87.3 7.89 38.5 33.3 Yes## 4 77.8 8.45 41.6 37.6 No## 5 93.2 7.81 34.3 31.5 Yes## 6 78.8 8.54 40.4 37.3 NoResumen
En la siguiente tabla, resume todas las operaciones que aprendió durante el tutorial.
Verbo Objetivo Código Explicación vistazo comprobar la estructura de un df glimpse(df)Idéntico a str () Seleccione() Seleccionar / excluir las variables select(df, A, B ,C)Seleccione las variables A, B y C select(df, A:C)Seleccione todas las variables de A a C select(df, -C)Excluir C filtrar() Filtrar el df basado en una o muchas condiciones filter(df, condition1)Una condición filter(df, condition1ondition2) arreglar() Ordene el conjunto de datos con una o muchas variables arrange(A)Tipo ascendente de variable A arrange(A, B)Tipo ascendente de variable A y B arrange(desc(A), B)Tipo descendente de variable A y ascendente tipo B %>% Crea una canalización entre cada paso step 1 %>% step 2 %>% step 3