R Seleccionar (), Filtrar (), Organizar (), Canalización con ejemplo

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## $ X  1, 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)head

Producció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 No

Resumen

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, condition1
ondition2)
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

Articulos interesantes...