Manipulação de dados com dplyr

Instalando e carregando o pacote dplyr

# Instala o pacote.
# install.packages("dplyr")

# Carrega o pacote
library(dplyr)

Vamos usar a base de dados "murders" do pacote dslabs.

library(dslabs)
data("murders") 

Vamos verificar o conteúdo do data frame:

head(murders) 
##        state abb region population total
## 1    Alabama  AL  South    4779736   135
## 2     Alaska  AK   West     710231    19
## 3    Arizona  AZ   West    6392017   232
## 4   Arkansas  AR  South    2915918    93
## 5 California  CA   West   37253956  1257
## 6   Colorado  CO   West    5029196    65

A função head() retorna o início de um vetor, matriz, tabela, data frame ou função.

mutate | Alterar ou adicionar colunas

murders <- mutate(murders, rate = total / population * 100000)

O data frame "murders" recebe uma nova coluna chamada "rate" que recebe o total de homicídios dividido pela população e multiplicado por 100,0000.

Veja que a nova coluna rate foi adicionada:

head(murders) 
##        state abb region population total     rate
## 1    Alabama  AL  South    4779736   135 2.824424
## 2     Alaska  AK   West     710231    19 2.675186
## 3    Arizona  AZ   West    6392017   232 3.629527
## 4   Arkansas  AR  South    2915918    93 3.189390
## 5 California  CA   West   37253956  1257 3.374138
## 6   Colorado  CO   West    5029196    65 1.292453

select | Seleciona as colunas (variáveis)

new_table <- select(murders, state, region, rate)
head(new_table)
##        state region     rate
## 1    Alabama  South 2.824424
## 2     Alaska   West 2.675186
## 3    Arizona   West 3.629527
## 4   Arkansas  South 3.189390
## 5 California   West 3.374138
## 6   Colorado   West 1.292453

Somente as variáveis state, region e rate do data frame murders foram selecionadas para compor o novo data frame chamado new_table.

filter | Filtra as linhas (observações)

new_table_2 <-filter(new_table, rate <= 0.71)
head(new_table_2)
##           state        region      rate
## 1        Hawaii          West 0.5145920
## 2          Iowa North Central 0.6893484
## 3 New Hampshire     Northeast 0.3798036
## 4  North Dakota North Central 0.5947151
## 5       Vermont     Northeast 0.3196211

Selecionamos somente as observações com taxas (rate) menores ou iguais a 0.71.

Nós podemos remover linhas usando o operador !=.

no_florida <- filter(murders, state != "Florida")

!= seleciona todas as linhas com exceção daquelas com o nome Florida.

Nós podemos também usar %in% para filtrar com dplyr. Por exemplo, você pode ver os dados de Nova York e texas assim:

NY_TX <- filter(murders, state %in% c("New York", "Texas"))
head(NY_TX)
##      state abb    region population total    rate
## 1 New York  NY Northeast   19378102   517 2.66796
## 2    Texas  TX     South   25145561   805 3.20136

Filtrando com duas condicionais

Suponha que você queira saber quais são os estados da região Nordeste (Northeast) que possuem uma população com mais de 500 mil pessoas. Note que você pode usar os operadores lógicos com a função filter:

NE <- filter(murders, population > 5000000 & region == "Northeast")
head(NE)
##           state abb    region population total     rate
## 1 Massachusetts  MA Northeast    6547629   118 1.802179
## 2    New Jersey  NJ Northeast    8791894   246 2.798032
## 3      New York  NY Northeast   19378102   517 2.667960
## 4  Pennsylvania  PA Northeast   12702379   457 3.597751

Exercícios

Instruções

# Note que para ranquear do maior para o menor valor você deve adicionar o sinal negativo.
x <- c(88, 100, 83, 92, 94)
rank(-x)
## [1] 4 1 5 3 2
# Definindo a taxa de assassinatos:
rate <-  murders$total/ murders$population * 100000
rank(-rate)
# Add a coluna com a taxa de assassinatos
murders <- mutate(murders, rate = total/population * 100000, rank = rank(-rate))

1 - Redefina os dados de murders para incluir a coluna chamada rank com as taxas de assassinatos do maior para o menor valor.

2 - Use select para mostrar somente os nomes e abreviações dos estados de murders. Defina um novo objeto chamado state_abb.

3 - Crie um novo data frame chamado murders_nw somente com os estados do nordeste e oeste northeast e west, respectivamente. Quantos estados existem nessas regiões (linhas)?

4 - Filtre os dados para que apresentem os 5 estados com maiores taxas de assassinatos. Não se esqueça de adicionar a coluna rate.

5 - Crie um novo data frame chamado no_south que remove os estados da região Sul. Quantos estados estão nessa categoria? Nós podemos usar a função nrow() pra isso.

6 - Suponha que você queira viver no Nordeste ou Oeste e quer que a taxa de assassinatos seja menor que 1. Crie um novo data frame chamado my_states com os dados dos estados que satisfaçam essas opções. Use select para mostrar somente os nomes dos estados (state), a taxa de assassinatos (rate)e o rank.

Respostas

1 -

murders <- mutate(murders, rank = rank(-rate))

# ou com pipe:
murders <-
  murders %>%
  mutate(rank = rank(-rate))

2 -

state_abb <- select(murders, state, abb)

# ou com pipe:
state_abb <-
murders %>%
select(state, abb) 

head(state_abb)
##        state abb
## 1    Alabama  AL
## 2     Alaska  AK
## 3    Arizona  AZ
## 4   Arkansas  AR
## 5 California  CA
## 6   Colorado  CO

3 -

murders_nw <- filter(murders, region %in% c("Northeast", "West"))

nrow(murders_nw)
## [1] 22

4 -

filter(murders, rank<=5)
##                  state abb        region population total      rate rank
## 1 District of Columbia  DC         South     601723    99 16.452753    1
## 2            Louisiana  LA         South    4533372   351  7.742581    2
## 3             Maryland  MD         South    5773552   293  5.074866    4
## 4             Missouri  MO North Central    5988927   321  5.359892    3
## 5       South Carolina  SC         South    4625364   207  4.475323    5
# ou com pipe:
murders %>%
  filter(rank <= 5)
##                  state abb        region population total      rate rank
## 1 District of Columbia  DC         South     601723    99 16.452753    1
## 2            Louisiana  LA         South    4533372   351  7.742581    2
## 3             Maryland  MD         South    5773552   293  5.074866    4
## 4             Missouri  MO North Central    5988927   321  5.359892    3
## 5       South Carolina  SC         South    4625364   207  4.475323    5

5 -

# Use filter para criar o data frame "no_south".
no_south<-filter(murders,region != "South")
# Use nrow() para calcular o número de linhas (observações).
nrow(no_south)
## [1] 34

6 -

# adiciona a coluna de taxas de homicídios.
murders <- mutate(murders, rate =  total / population * 100000, rank = rank(-rate))

# cria os dados chamados `my_states`, que satizfaz as duas condições.
my_states <- filter(murders, region %in% c("Northeast", "West") & rate < 1)

# Use select para mostrar apenas o nome do estado, a taxa de assassinatos e o rank.
select(my_states, state, rate, rank)
##           state      rate rank
## 1        Hawaii 0.5145920   49
## 2         Idaho 0.7655102   46
## 3         Maine 0.8280881   44
## 4 New Hampshire 0.3798036   50
## 5        Oregon 0.9396843   42
## 6          Utah 0.7959810   45
## 7       Vermont 0.3196211   51
## 8       Wyoming 0.8871131   43
# ou com pipe:
my_states <-
murders %>%
  mutate(rate = total / population * 100000, rank = rank(-rate))%>%
  filter(region %in% c("Northeast", "West") & rate < 1)%>%
  select(state, rate, rank)

Resumo

  • Para adicionar ou modificar um coluna na tabela de dados nós usamos a função mutate().

  • Para filtrar os dados, criando subconjuntos pelos valores das linhas utilizamos a função filter().

  • Para criar subconjuntos de dados selecionando colunas específicas, nós utilizamos a função select().

Atalhos

No Rstudio:

  • crtl + alt + i Cria um novo chunk 1 no Rmarkdown

  • crtl + shift + a Reindenta o código

  • crtl + shift + c # Comenta a linha do código

  • crtl + shift + m cria o pipe %>%

  • alt - cria o símbolo <- no chunk ou = fora do chunk

Esse tutorial é baseado (modificado/traduzido) no livro do professor Rafael A. Irizarry “Introduction to Data Science” que pode ser obtido de forma gratuita aqui. O livro é utilizado no curso Data Science: R Basics da plataforma edx oferecido pela universidade de Harvard. Esse tutorial está sob licença Creative Commons Attribution-ShareAlike 4.0 Licença internacional. creative Para ver uma cópia dessa licença acesse aqui


  1. Trecho de código

Avatar
Allan M. S. B. de Alvarenga

My main interest is to use programming languages and mathematical modeling to answer ecological questions.