R Sélectionnez (), Filtre (), Réorganiser (), Pipeline avec exemple

Table des matières:

Anonim

Dans ce tutoriel, vous apprendrez

  • sélectionner()
  • Filtre()
  • Pipeline
  • organiser()

La bibliothèque appelée dplyr contient des verbes précieux pour naviguer dans l'ensemble de données. Grâce à ce didacticiel, vous utiliserez l'ensemble de données Temps de trajet. L'ensemble de données recueille des informations sur le trajet effectué par un conducteur entre son domicile et son lieu de travail. Il y a quatorze variables dans l'ensemble de données, notamment:

  • DayOfWeek: Identifiez le jour de la semaine où le conducteur utilise sa voiture
  • Distance: la distance totale du trajet
  • MaxSpeed: la vitesse maximale du voyage
  • TotalTime: la durée en minutes du trajet

L'ensemble de données contient environ 200 observations dans l'ensemble de données, et les trajets ont eu lieu du lundi au vendredi.

Tout d'abord, vous devez:

  • charger le jeu de données
  • vérifiez la structure des données.

Une fonctionnalité pratique avec dplyr est la fonction glimpse (). C'est une amélioration par rapport à str (). Nous pouvons utiliser glimpse () pour voir la structure du jeu de données et décider de la manipulation requise.

library(dplyr)PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv"df <- read.csv(PATH)glimpse(df)

Production:

## 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… 

Il est évident que la variable Commentaires nécessite un diagnostic plus approfondi. Les premières observations de la variable Commentaires ne sont que des valeurs manquantes.

sum(df$Comments =)

Explication du code

  • sum (df $ Comments == ""): Somme les observations égales à "" dans la colonne commentaires de df

Production:

## [1] 181 

sélectionner()

Nous commencerons par le verbe select (). Nous n'avons pas nécessairement besoin de toutes les variables, et une bonne pratique consiste à ne sélectionner que les variables que vous trouvez pertinentes.

Nous avons 181 observations manquantes, soit près de 90% de l'ensemble de données. Si vous décidez de les exclure, vous ne pourrez pas poursuivre l'analyse.

L'autre possibilité est de supprimer la variable Comment avec le verbe select ().

Nous pouvons sélectionner des variables de différentes manières avec select (). Notez que le premier argument est l'ensemble de données.

- `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.

Vous pouvez utiliser la troisième méthode pour exclure la variable Commentaires.

step_1_df <- select(df, -Comments)dim(df)

Production:

## [1] 205 14
dim(step_1_df)

Production:

## [1] 205 13 

Le jeu de données d'origine a 14 caractéristiques tandis que le step_1_df en a 13.

Filtre()

Le verbe filter () permet de conserver les observations suivant un critère. Le filtre () fonctionne exactement comme select (), vous passez d'abord la trame de données, puis une condition séparée par une virgule:

filter(df, condition)arguments:- df: dataset used to filter the data- condition: Condition used to filter the data

Un critère

Tout d'abord, vous pouvez compter le nombre d'observations à l'intérieur de chaque niveau d'une variable factorielle.

table(step_1_df$GoingTo)

Explication du code

  • table (): compte le nombre d'observations par niveau. Remarque, seules les variables de niveau de facteur sont acceptées
  • table (step_1_df $ GoingTo): comptez le nombre de voyages vers la destination finale.

Production:

#### GSK Home## 105 100

Le tableau des fonctions () indique que 105 trajets vont à GSK et 100 à domicile.

Nous pouvons filtrer les données pour renvoyer un ensemble de données avec 105 observations et un autre avec 100 observations.

# Select observationsif GoingTo == Homeselect_home <- filter(df, GoingTo == "Home")dim(select_home)

Production:

## [1] 100 14
# Select observationsif GoingTo == Workselect_work <- filter(df, GoingTo == "GSK")dim(select_work)

Production:

## [1] 105 14 

Critères multiples

Nous pouvons filtrer un ensemble de données avec plus d'un critère. Par exemple, vous pouvez extraire les observations où la destination est Domicile et qui se sont produites un mercredi.

select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday")dim(select_home_wed)

Production:

## [1] 23 14 

23 observations correspondaient à ce critère.

Pipeline

La création d'un jeu de données nécessite de nombreuses opérations, telles que:

  • importation
  • fusionner
  • sélection
  • filtration
  • etc

La bibliothèque dplyr est fournie avec un opérateur pratique,%>%, appelé pipeline . La fonction de pipeline rend la manipulation propre, rapide et moins rapide à l'erreur.

Cet opérateur est un code qui effectue des étapes sans enregistrer les étapes intermédiaires sur le disque dur. Si vous revenez à notre exemple ci-dessus, vous pouvez sélectionner les variables qui vous intéressent et les filtrer. Nous avons trois étapes:

  • Étape 1: Importez les données: importez les données GPS
  • Étape 2: Sélectionnez les données: sélectionnez GoingTo et DayOfWeek
  • Étape 3: Filtrez les données: retournez uniquement à la maison et mercredi

Nous pouvons utiliser la manière difficile de le faire:

# 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)

Production:

## GoingTo DayOfWeek## 1 Home Wednesday## 2 Home Wednesday## 3 Home Wednesday## 4 Home Wednesday## 5 Home Wednesday## 6 Home Wednesday

Ce n'est pas une manière pratique d'effectuer de nombreuses opérations, en particulier dans une situation comportant de nombreuses étapes. L'environnement se retrouve avec beaucoup d'objets stockés.

Utilisons plutôt l'opérateur de pipeline%>%. Il suffit de définir la trame de données utilisée au début et tout le processus en découlera.

Syntaxe de base du pipeline

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.

Vous pouvez créer votre premier canal en suivant les étapes énumérées ci-dessus.

# 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)

Production:

## [1] TRUE 

Nous sommes prêts à créer un superbe ensemble de données avec l'opérateur de pipeline.

organiser()

Dans le didacticiel précédent, vous apprenez à trier les valeurs avec la fonction sort (). La bibliothèque dplyr a sa fonction de tri. Cela fonctionne comme un charme avec le pipeline. Le verbe arrange () peut réorganiser une ou plusieurs lignes, par ordre croissant (par défaut) ou décroissant.

- `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 

Nous pouvons trier la distance par destination.

# Sort by destination and distancestep_2_df <-step_1_df %>%arrange(GoingTo, Distance)head

Production:

## 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

Résumé

Dans le tableau ci-dessous, vous résumez toutes les opérations que vous avez apprises au cours du didacticiel.

Verbe Objectif Code Explication
aperçu vérifier la structure d'un df
glimpse(df)
Identique à str ()
sélectionner() Sélectionnez / excluez les variables
select(df, A, B ,C)
Sélectionnez les variables A, B et C
select(df, A:C)
Sélectionnez toutes les variables de A à C
select(df, -C)
Exclure C
filtre() Filtrer le df en fonction d'une ou de plusieurs conditions
filter(df, condition1)
Une condition
filter(df, condition1
ondition2)
organiser() Trier le jeu de données avec une ou plusieurs variables
arrange(A)
Sorte ascendante de la variable A
arrange(A, B)
Sorte ascendante des variables A et B
arrange(desc(A), B)
Sorte descendante de variable A et sorte ascendante de B
%>% Créer un pipeline entre chaque étape
step 1 %>% step 2 %>% step 3