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
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.
Para ver uma cópia dessa licença acesse aqui
Trecho de código↩