R Selecionar (), Filtrar (), Organizar (), Pipeline com Exemplo

Índice:

Anonim

Neste tutorial, você aprenderá

  • select ()
  • Filtro()
  • Pipeline
  • arranjo()

A biblioteca chamada dplyr contém verbos valiosos para navegar dentro do conjunto de dados. Por meio deste tutorial, você usará o conjunto de dados Tempos de viagem. O conjunto de dados coleta informações sobre as viagens conduzidas por um motorista entre sua casa e seu local de trabalho. Existem quatorze variáveis ​​no conjunto de dados, incluindo:

  • DayOfWeek: Identifique o dia da semana em que o motorista usa seu carro
  • Distância: a distância total da viagem
  • MaxSpeed: a velocidade máxima da viagem
  • TotalTime: a duração da viagem em minutos

O conjunto de dados tem cerca de 200 observações no conjunto de dados, e os passeios ocorreram entre segunda a sexta-feira.

Em primeiro lugar, você precisa:

  • carregue o conjunto de dados
  • verifique a estrutura dos dados.

Um recurso útil com dplyr é a função glimpse (). Esta é uma melhoria em relação a str (). Podemos usar glimpse () para ver a estrutura do conjunto de dados e decidir qual manipulação é necessária.

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

Resultado:

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

É óbvio que a variável Comentários precisa de mais diagnósticos. As primeiras observações da variável de comentários são apenas valores ausentes.

sum(df$Comments =)

Explicação do código

  • sum (df $ Comments == ""): soma as observações são iguais a "" na coluna de comentários de df

Resultado:

## [1] 181 

select ()

Começaremos com o verbo select (). Não precisamos necessariamente de todas as variáveis, e uma boa prática é selecionar apenas as variáveis ​​que você achar relevantes.

Temos 181 observações ausentes, quase 90 por cento do conjunto de dados. Se você decidir excluí-los, não poderá continuar a análise.

A outra possibilidade é eliminar a variável Comment com o verbo select ().

Podemos selecionar variáveis ​​de maneiras diferentes com select (). Observe que o primeiro argumento é o conjunto de dados.

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

Você pode usar a terceira maneira de excluir a variável de comentários.

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

Resultado:

## [1] 205 14
dim(step_1_df)

Resultado:

## [1] 205 13 

O conjunto de dados original possui 14 recursos, enquanto o step_1_df possui 13.

Filtro()

O verbo filter () ajuda a manter as observações seguindo um critério. O filtro () funciona exatamente como select (), você passa o quadro de dados primeiro e, em seguida, uma condição separada por uma vírgula:

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

Um critério

Em primeiro lugar, você pode contar o número de observações dentro de cada nível de uma variável de fator.

table(step_1_df$GoingTo)

Explicação do código

  • tabela (): conte o número de observações por nível. Observe, apenas variáveis ​​de nível de fator são aceitas
  • tabela (step_1_df $ GoingTo): Conte o número de viagens até o destino final.

Resultado:

#### GSK Home## 105 100

A tabela de funções () indica que 105 viagens estão indo para GSK e 100 para casa.

Podemos filtrar os dados para retornar um conjunto de dados com 105 observações e outro com 100 observações.

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

Resultado:

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

Resultado:

## [1] 105 14 

Critérios múltiplos

Podemos filtrar um conjunto de dados com mais de um critério. Por exemplo, você pode extrair as observações em que o destino é Casa e ocorreu em uma quarta-feira.

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

Resultado:

## [1] 23 14 

23 observações corresponderam a este critério.

Pipeline

A criação de um conjunto de dados requer muitas operações, como:

  • importando
  • fusão
  • selecionando
  • filtrando
  • e assim por diante

A biblioteca dplyr vem com um operador prático,%>%, chamado pipeline . O recurso de pipeline torna a manipulação limpa, rápida e menos pronta para erros.

Este operador é um código que executa etapas sem salvar etapas intermediárias no disco rígido. Se você voltou ao nosso exemplo acima, pode selecionar as variáveis ​​de interesse e filtrá-las. Temos três etapas:

  • Etapa 1: importar dados: importar os dados GPS
  • Etapa 2: Selecione os dados: selecione GoingTo e DayOfWeek
  • Etapa 3: filtrar dados: retornar apenas para casa e quarta-feira

Podemos usar da maneira mais difícil:

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

Resultado:

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

Essa não é uma maneira conveniente de realizar muitas operações, especialmente em uma situação com muitas etapas. O ambiente acaba com muitos objetos armazenados.

Em vez disso, vamos usar o operador de pipeline%>%. Precisamos apenas definir o quadro de dados usado no início e todo o processo fluirá dele.

Sintaxe básica do 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.

Você pode criar seu primeiro tubo seguindo as etapas enumeradas acima.

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

Resultado:

## [1] TRUE 

Estamos prontos para criar um conjunto de dados impressionante com o operador do duto.

arranjo()

No tutorial anterior, você aprendeu como classificar os valores com a função sort (). A biblioteca dplyr tem sua função de classificação. Funciona perfeitamente com o pipeline. O verbo organize () pode reordenar uma ou várias linhas, de forma crescente (padrão) ou decrescente.

- `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 classificar a distância por destino.

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

Resultado:

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

Resumo

Na tabela abaixo, você resume todas as operações que aprendeu durante o tutorial.

Verbo Objetivo Código Explicação
vislumbre verifique a estrutura de um df
glimpse(df)
Idêntico a str ()
select () Selecione / exclua as variáveis
select(df, A, B ,C)
Selecione as variáveis ​​A, B e C
select(df, A:C)
Selecione todas as variáveis ​​de A a C
select(df, -C)
Excluir C
filtro() Filtre o df com base em uma ou mais condições
filter(df, condition1)
Uma condição
filter(df, condition1
condição2)
arranjo() Classifique o conjunto de dados com uma ou mais variáveis
arrange(A)
Tipo crescente de variável A
arrange(A, B)
Tipo crescente das variáveis ​​A e B
arrange(desc(A), B)
Tipo descendente da variável A e tipo ascendente de B
%>% Crie um pipeline entre cada etapa
step 1 %>% step 2 %>% step 3