Utilizando o pacote dplyr

O dplyr, um pacote do R para manipulação de dados, oferece uma variedade de funções (ou verbos) para operações como filtragem, seleção, classificação, adição ou exclusão de colunas e agregação de dados. Além de suas funções essenciais, o dplyr simplifica a manipulação de dados, tornando o código mais intuitivo e fácil de ler. Aprenda a usar o dplyr no R.
Data Wrangling
R
Autor

Flavia de Jesus

Data de Publicação

24 de abril de 2021

O dplyr é um pacote do R para manipulação de dados. Ele engloba muitas funções, também chamadas de verbos, que realizam diversas operações, tais como: aplicação de filtro, seleção de colunas específicas, classificação de dados, adição ou exclusão de colunas e agregação de dados. Além de possuir várias funções importantíssimas, o dplyr possui outras vantagens, como uma manipulação mais simples nos dados que possibilitam ao código uma escrita mais intuitiva e uma leitura simplificada.

Funções básicas

O dplyr possui muitas funcionalidades, no entanto neste post usaremos apenas as principais, que são:

  • rename(): Renomeia as variáveis (colunas).
  • filter(): Filtra registros (linhas).
  • select(): Seleciona variáveis por seus nomes.
  • arrange(): Ordena o data.frame de acordo com os valores de uma(s) coluna(s).
  • mutate(): Cria novas variáveis com funções de variáveis existentes.
  • summarize(): Reduz uma série de valores de uma coluna em um único valor.

Todas essas funções recebem no mínimo dois argumentos: o primeiro é o nome do data.frame e depois os argumentos referentes à função (nomes de colunas, funções, condições).

Dados

Vamos carregar uma base de dados de testes para explicarmos os exemplos. Escolhemos os dados brasileiros da PNAD de 2017, a Pesquisa Nacional por Amostras de Domicílio, que podem ser obtidos aqui. Para esse post, iremos considerar uma amostra dessa base com apenas algumas variáveis e que podem ser baixados clicando no link. Esses dados contém informações relacionadas ao ano da pesquisa, a capital em que viviam as pessoas entrevistadas no momento da pesquisa, a idade, o sexo, os rendimentos financeiros, a raça, os anos de estudo, se possui alguma ocupação e se recebe o bolsa família. Olhando rapidamente os dados, temos:

Código
pnad_2017 <- read.csv("pnad_2017_amostra.csv")
Código
head(pnad_2017) # imprime as primeiras linhas da base atribuída ao objeto pnad_2017.
Ano UF Capital RM_RIDE V2007 VD4016 VD4017 V5002A V5002A2 V2010 VD3002 VD4002 V1032 V2009
1 2017 17 NA NA 1 NA NA 2 NA 4 5 NA 116.1286 53
2 2017 16 NA NA 1 NA NA 2 NA 4 0 NA 295.7786 5
3 2017 27 NA NA 2 NA NA 2 NA 1 3 NA 88.6033 10
4 2017 21 NA NA 2 NA NA 1 240 2 0 NA 447.0010 32
5 2017 15 15 15 1 1500 600 2 NA 4 4 1 403.8757 54
6 2017 43 NA NA 2 NA NA 2 NA 1 0 NA 695.0841 10

Neste exemplo usamos a função read.csv() do pacote base do R para importar nossos dados, porém existem diversas funções e outros pacotes para importar dados que podem ser vistos aqui.

rename()

Vamos começar renomeando as variáveis usando a função rename().

Código
library(dplyr) # carrega o pacote dplyr.
pnad <- rename(pnad_2017, sexo = V2007, 
               bolsa_familia = V5002A, anos_estudo = VD3002,
               valor_efetivamente_recebido = V5002A2, ocupacao = VD4002,
               rendimento_habitual = VD4016, rendimento_efetivo = VD4017,
               raca = V2010, idade = V2009, peso_domicilio = V1032)
head(pnad)
Ano UF Capital RM_RIDE sexo rendimento_habitual rendimento_efetivo bolsa_familia valor_efetivamente_recebido raca anos_estudo ocupacao peso_domicilio idade
1 2017 17 NA NA 1 NA NA 2 NA 4 5 NA 116.1286 53
2 2017 16 NA NA 1 NA NA 2 NA 4 0 NA 295.7786 5
3 2017 27 NA NA 2 NA NA 2 NA 1 3 NA 88.6033 10
4 2017 21 NA NA 2 NA NA 1 240 2 0 NA 447.0010 32
5 2017 15 15 15 1 1500 600 2 NA 4 4 1 403.8757 54
6 2017 43 NA NA 2 NA NA 2 NA 1 0 NA 695.0841 10

As funções de dplyr nunca modificam suas entradas, então se você quiser salvar o resultado, precisará guardar o seu código em algum objeto usando o operador de atribuição <-.

filter()

A função filter() permite criar um subconjunto de observações com base em seus valores. O primeiro argumento é o nome do data.frame. O segundo argumento e os subsequentes são as expressões que filtram o data.frame. Por exemplo podemos filtrar todas as pessoas do sexo feminino que responderam a esta pesquisa. Na coluna sexo, o número 1 representa o sexo masculino e o número 2 representa o sexo feminino.

Código
mulheres <- filter(pnad, sexo == 2)
head(mulheres)
Ano UF Capital RM_RIDE sexo rendimento_habitual rendimento_efetivo bolsa_familia valor_efetivamente_recebido raca anos_estudo ocupacao peso_domicilio idade
1 2017 27 NA NA 2 NA NA 2 NA 1 3 NA 88.6033 10
2 2017 21 NA NA 2 NA NA 1 240 2 0 NA 447.0010 32
3 2017 43 NA NA 2 NA NA 2 NA 1 0 NA 695.0841 10
4 2017 24 NA 24 2 NA NA 2 NA 1 7 NA 622.9802 15
5 2017 43 NA NA 2 NA NA 2 NA 1 3 NA 288.5456 74
6 2017 24 24 24 2 2000 2000 2 NA 2 15 1 632.9212 37

Quando executamos esta linha de código, o dplyr realiza a operação de filtragem e retorna um novo data.frame com as informações apenas das pessoas do sexo feminino da pesquisa. Podemos também filtrar mais de uma observação ao mesmo tempo. Por exemplo, vamos supor que queremos saber todas as informações apenas das mulheres indígenas que responderam a esta pesquisa. Na variável raca devemos utilizar o código 5 para obter essas observações.

Código
mulher_indigena <- filter(pnad, sexo == 2, raca == 5)
head(mulher_indigena)
Ano UF Capital RM_RIDE sexo rendimento_habitual rendimento_efetivo bolsa_familia valor_efetivamente_recebido raca anos_estudo ocupacao peso_domicilio idade
1 2017 27 27 27 2 NA NA 1 124 5 5 2 462.0714 21
2 2017 23 NA 23 2 NA NA 2 NA 5 11 2 212.2604 21
3 2017 41 NA NA 2 NA NA 2 NA 5 3 NA 599.5468 77

Para a usar a filtragem melhor, o R fornece um conjunto de operadores de comparação, tais como: >, >=, <, <=, !=(diferente), ==(igual) e !(não). Neste próximo exemplo queremos selecionar todas as pessoas do sexo masculino que possuem idades entre 25 e 30 anos, então usaremos os operadores >e <.

Código
homem_idade <- filter(pnad, sexo == 1, idade > 25, idade < 30)
head(homem_idade)
Ano UF Capital RM_RIDE sexo rendimento_habitual rendimento_efetivo bolsa_familia valor_efetivamente_recebido raca anos_estudo ocupacao peso_domicilio idade
1 2017 33 NA NA 1 300 300 2 NA 4 8 1 243.4132 29
2 2017 33 NA NA 1 937 937 2 NA 4 15 1 571.0787 27
3 2017 41 NA NA 1 1677 1700 2 NA 4 8 1 426.4508 27
4 2017 21 NA NA 1 NA NA 2 NA 1 4 NA 411.5138 28
5 2017 42 NA 42 1 1500 1500 2 NA 1 15 1 336.1146 28
6 2017 35 NA NA 1 1200 3600 2 NA 2 3 1 111.9671 26

Neste próximo exemplo vamos utilizar o operador !(não). Vamos supor que queremos selecionar todas as informações da PNAD_2017 apenas das pessoas do sexo feminino. Existem várias maneiras de fazer isso e uma delas é utilizando o operador !(não):

Código
nao_homens <- filter(pnad, !(sexo == 1))
head(nao_homens)
Ano UF Capital RM_RIDE sexo rendimento_habitual rendimento_efetivo bolsa_familia valor_efetivamente_recebido raca anos_estudo ocupacao peso_domicilio idade
1 2017 27 NA NA 2 NA NA 2 NA 1 3 NA 88.6033 10
2 2017 21 NA NA 2 NA NA 1 240 2 0 NA 447.0010 32
3 2017 43 NA NA 2 NA NA 2 NA 1 0 NA 695.0841 10
4 2017 24 NA 24 2 NA NA 2 NA 1 7 NA 622.9802 15
5 2017 43 NA NA 2 NA NA 2 NA 1 3 NA 288.5456 74
6 2017 24 24 24 2 2000 2000 2 NA 2 15 1 632.9212 37

Além dos valores lógicos um outro recurso importante do R são os valores faltantes, os NAs. O código NA representa um valor desconhecido. Então vamos supor que queremos filtrar todas as pessoas que não informaram se possuem alguma ocupação ou não, usaremos então:

Código
sem_informacao <- filter(pnad, is.na(ocupacao))
head(sem_informacao)
Ano UF Capital RM_RIDE sexo rendimento_habitual rendimento_efetivo bolsa_familia valor_efetivamente_recebido raca anos_estudo ocupacao peso_domicilio idade
1 2017 17 NA NA 1 NA NA 2 NA 4 5 NA 116.1286 53
2 2017 16 NA NA 1 NA NA 2 NA 4 0 NA 295.7786 5
3 2017 27 NA NA 2 NA NA 2 NA 1 3 NA 88.6033 10
4 2017 21 NA NA 2 NA NA 1 240 2 0 NA 447.0010 32
5 2017 43 NA NA 2 NA NA 2 NA 1 0 NA 695.0841 10
6 2017 24 NA 24 2 NA NA 2 NA 1 7 NA 622.9802 15

Podemos também utilizar mais de uma condição (usando & ou |). Se quisermos registros que atendam a todas as condições, podemos utilizar & (E) ou separar as condições por vírgulas. E quando for necessário registros que atendam a pelo menos uma condição, devemos utilizar o operador | (OU). Vamos agora filtrar pessoas com idade de 22 anos OU 33 anos que participaram da pesquisa.

Código
idade_ou <- filter(pnad, idade == 22 | idade == 33)
head(idade_ou)
Ano UF Capital RM_RIDE sexo rendimento_habitual rendimento_efetivo bolsa_familia valor_efetivamente_recebido raca anos_estudo ocupacao peso_domicilio idade
1 2017 25 NA NA 2 NA NA 1 425 4 0 NA 100.3146 33
2 2017 35 35 35 2 1350 1350 2 NA 4 11 1 1565.9688 22
3 2017 25 NA NA 2 NA NA 1 190 4 11 NA 151.7975 22
4 2017 29 NA NA 2 NA NA 1 150 4 5 NA 307.5332 22
5 2017 26 NA NA 1 1600 1600 2 NA 1 8 1 268.9563 33
6 2017 52 NA NA 2 NA NA 2 NA 1 11 2 162.3579 22

select()

A função select() permite que você foque em um subconjunto útil usando operações baseadas nos nomes das variáveis. Neste primeiro exemplo utilizaremos a função select() para selecionar as colunas do banco de dados pelo nome. Não queremos todas as variáveis, queremos apenas as colunas anos_estudo e idade.

Código
estudo_idade <- select(pnad, anos_estudo, idade)
head(estudo_idade)
anos_estudo idade
1 5 53
2 0 5
3 3 10
4 0 32
5 4 54
6 0 10

Podemos também selecionar as variáveis pelos índices das colunas. Por exemplo, se quisermos selecionar as colunas Ano, UF e Capital, podemos selecioná-las da seguintes maneira:

Código
indice <- select(pnad, 1:3)
head(indice)
Ano UF Capital
1 2017 17 NA
2 2017 16 NA
3 2017 27 NA
4 2017 21 NA
5 2017 15 15
6 2017 43 NA

O operador : é muito útil para selecionar colunas consecutivas. Neste próximo exemplo selecionamos as colunas entre raca e idade, com elas incluso.

Código
raca_idade <- select(pnad, raca:idade)
head(raca_idade)
raca anos_estudo ocupacao peso_domicilio idade
1 4 5 NA 116.1286 53
2 4 0 NA 295.7786 5
3 1 3 NA 88.6033 10
4 2 0 NA 447.0010 32
5 4 4 1 403.8757 54
6 1 0 NA 695.0841 10

Para retirar colunas da base de dados, basta acrescentar um - antes da seleção. Aqui selecionamos todas as colunas, exceto aquelas entre raca e idade, com elas incluso.

Código
raca_idade2 <- select(pnad, -(raca:idade))
head(raca_idade2)
Ano UF Capital RM_RIDE sexo rendimento_habitual rendimento_efetivo bolsa_familia valor_efetivamente_recebido
1 2017 17 NA NA 1 NA NA 2 NA
2 2017 16 NA NA 1 NA NA 2 NA
3 2017 27 NA NA 2 NA NA 2 NA
4 2017 21 NA NA 2 NA NA 1 240
5 2017 15 15 15 1 1500 600 2 NA
6 2017 43 NA NA 2 NA NA 2 NA

Dentro da função select() podemos usar algumas funções auxiliares tais como:

  • starts_with("abc"): seleciona variáveis que comecem com “abc”.
  • ends_with("def"): seleciona variáveis que terminam em “def”.
  • contains("jkl"): seleciona variáveis que contém “jkl”.
  • num_range("x", 1:3): Seleciona variáveis que contém x1, x2 e x3.

Utilizando uma das funções auxiliares vamos selecionar a seguir todas as colunas que começam com o texto “rendimento”.

Código
starts <- select(pnad, starts_with("rendimento"))
head(starts)
rendimento_habitual rendimento_efetivo
1 NA NA
2 NA NA
3 NA NA
4 NA NA
5 1500 600
6 NA NA

Uma outra função auxiliar interessante dentro da função select() é o everything(), que tem como propósito mover variáveis para o começo do data.frame. Esta função é bem útil quando estamos usando uma base com muitas variáveis e queremos deixar algumas mais visíveis.

Código
everything <- select(pnad, idade, raca, ocupacao, everything())
head(everything)
idade raca ocupacao Ano UF Capital RM_RIDE sexo rendimento_habitual rendimento_efetivo bolsa_familia valor_efetivamente_recebido anos_estudo peso_domicilio
1 53 4 NA 2017 17 NA NA 1 NA NA 2 NA 5 116.1286
2 5 4 NA 2017 16 NA NA 1 NA NA 2 NA 0 295.7786
3 10 1 NA 2017 27 NA NA 2 NA NA 2 NA 3 88.6033
4 32 2 NA 2017 21 NA NA 2 NA NA 1 240 0 447.0010
5 54 4 1 2017 15 15 15 1 1500 600 2 NA 4 403.8757
6 10 1 NA 2017 43 NA NA 2 NA NA 2 NA 0 695.0841

arrange()

A função arrange() funciona de maneira similar a filter(), porém em vez de selecionar linhas ela muda a ordem delas. O primeiro argumento é a base de dados. Os demais argumentos são as colunas pelas quais queremos ordenar as linhas. Ela recebe um data.frame e um conjunto de nomes de coluna pelos quais ordenar. Queremos ordenar nossos dados, em ordem crescente, pelo nome do fator idade.

Código
ordena_idade <- arrange(pnad, idade)
head(ordena_idade)
Ano UF Capital RM_RIDE sexo rendimento_habitual rendimento_efetivo bolsa_familia valor_efetivamente_recebido raca anos_estudo ocupacao peso_domicilio idade
1 2017 13 NA NA 1 NA NA 2 NA 4 NA NA 77.20481 0
2 2017 21 NA NA 2 NA NA 2 NA 1 NA NA 288.41435 0
3 2017 31 NA NA 2 NA NA 2 NA 2 NA NA 239.92194 0
4 2017 31 NA NA 1 NA NA 2 NA 4 NA NA 662.46602 0
5 2017 26 26 26 1 NA NA 2 NA 1 NA NA 514.14054 0
6 2017 11 NA NA 1 NA NA 2 NA 4 NA NA 255.85428 0

Se formos fornecer mais de um nome de coluna, cada coluna adicional será usada para desapate nos valores das colunas anteriores.

Código
idade_estudo <- arrange(pnad, idade, anos_estudo)
head(idade_estudo)
Ano UF Capital RM_RIDE sexo rendimento_habitual rendimento_efetivo bolsa_familia valor_efetivamente_recebido raca anos_estudo ocupacao peso_domicilio idade
1 2017 13 NA NA 1 NA NA 2 NA 4 NA NA 77.20481 0
2 2017 21 NA NA 2 NA NA 2 NA 1 NA NA 288.41435 0
3 2017 31 NA NA 2 NA NA 2 NA 2 NA NA 239.92194 0
4 2017 31 NA NA 1 NA NA 2 NA 4 NA NA 662.46602 0
5 2017 26 26 26 1 NA NA 2 NA 1 NA NA 514.14054 0
6 2017 11 NA NA 1 NA NA 2 NA 4 NA NA 255.85428 0

Para que a ordenação seja feita de maneira decrescente basta utilizarmos o símbolo - ou então a função desc().

Código
idade_desc <- arrange(pnad, desc(idade))
head(idade_desc)
Ano UF Capital RM_RIDE sexo rendimento_habitual rendimento_efetivo bolsa_familia valor_efetivamente_recebido raca anos_estudo ocupacao peso_domicilio idade
1 2017 29 NA NA 2 NA NA 2 NA 1 0 NA 848.7943 86
2 2017 35 NA NA 1 NA NA 2 NA 1 4 NA 1204.5252 86
3 2017 35 NA NA 1 NA NA 2 NA 1 4 NA 386.5129 85
4 2017 31 NA NA 2 NA NA 2 NA 1 4 NA 648.5864 84
5 2017 29 NA NA 1 NA NA 2 NA 4 0 NA 1773.1250 84
6 2017 43 43 43 1 NA NA 2 NA 1 3 NA 446.7535 82

mutate()

A função mutate() além de selecionar conjuntos de colunas existentes, é muito eficaz ao adicionar novas colunas que sejam funções de colunas existentes. mutate() sempre adiciona novas colunas no final de seu conjunto de dados. Por exemplo, em nossos dados temos o valor rendimento_habitual, mas estamos interessados em apenas 10% deste valor. Podemos conseguir esse valor multiplicando rendimento_habitual por 10 e dividindo por 100.

Código
rendimento_hab <- mutate(pnad, rendimento = rendimento_habitual * 10 / 100)
head(rendimento_hab)
Ano UF Capital RM_RIDE sexo rendimento_habitual rendimento_efetivo bolsa_familia valor_efetivamente_recebido raca anos_estudo ocupacao peso_domicilio idade rendimento
1 2017 17 NA NA 1 NA NA 2 NA 4 5 NA 116.1286 53 NA
2 2017 16 NA NA 1 NA NA 2 NA 4 0 NA 295.7786 5 NA
3 2017 27 NA NA 2 NA NA 2 NA 1 3 NA 88.6033 10 NA
4 2017 21 NA NA 2 NA NA 1 240 2 0 NA 447.0010 32 NA
5 2017 15 15 15 1 1500 600 2 NA 4 4 1 403.8757 54 150
6 2017 43 NA NA 2 NA NA 2 NA 1 0 NA 695.0841 10 NA

Também poderíamos ter substituido esta nova variável por uma já existente. Repare que desta vez não será adicionada nenhuma coluna no final da base de dados, a coluna rendimento_habitual terá apenas seus valores substituidos.

Código
rendimento <- mutate(pnad, rendimento_habitual = rendimento_habitual * 10 / 100)
head(rendimento)
Ano UF Capital RM_RIDE sexo rendimento_habitual rendimento_efetivo bolsa_familia valor_efetivamente_recebido raca anos_estudo ocupacao peso_domicilio idade
1 2017 17 NA NA 1 NA NA 2 NA 4 5 NA 116.1286 53
2 2017 16 NA NA 1 NA NA 2 NA 4 0 NA 295.7786 5
3 2017 27 NA NA 2 NA NA 2 NA 1 3 NA 88.6033 10
4 2017 21 NA NA 2 NA NA 1 240 2 0 NA 447.0010 32
5 2017 15 15 15 1 1500 600 2 NA 4 4 1 403.8757 54
6 2017 43 NA NA 2 NA NA 2 NA 1 0 NA 695.0841 10

Podemos fazer qualquer operação com uma ou mais colunas. A única regra é que o resultado da operação retorne um vetor com comprimento igual ao número de linhas dos dados. Podemos criar e modificar quantas colunas quisermos dentro de um mesmo mutate.

Código
dados_es <- filter(pnad, UF == 32)
dados_es <- mutate(dados_es,
    uf_sigla = "ES",
    ano = 2017
)
head(dados_es)
Ano UF Capital RM_RIDE sexo rendimento_habitual rendimento_efetivo bolsa_familia valor_efetivamente_recebido raca anos_estudo ocupacao peso_domicilio idade uf_sigla ano
1 2017 32 NA NA 1 NA NA 2 NA 4 4 NA 164.9826 13 ES 2017
2 2017 32 NA NA 2 100 100 2 NA 4 11 1 273.1574 31 ES 2017
3 2017 32 NA 32 1 NA NA 2 NA 1 3 NA 238.8926 10 ES 2017
4 2017 32 NA 32 1 NA NA 2 NA 2 NA NA 272.8574 1 ES 2017
5 2017 32 NA 32 2 1200 1200 2 NA 4 11 1 329.9868 25 ES 2017
6 2017 32 NA 32 2 1000 1000 2 NA 4 11 1 437.8421 29 ES 2017

summarize()

A função summarize() reduz um data.frame a uma única linha. Para sumarizar uma coluna da base, utilizamos a função summarize(). O código abaixo resume a coluna anos_estudo pela sua média.

Código
media_estudo <- summarize(pnad, estudo = mean(anos_estudo, na.rm = TRUE))
head(media_estudo)
estudo
1 6.779443

Podemos calcular diversas sumarizações diferentes em um mesmo summarize. Cada sumarização será uma coluna da nova base.

Código
sumarizando <- summarize(pnad,
    media_estudo = mean(anos_estudo, na.rm = TRUE),
    mediana_idade = median(idade, na.rm = TRUE),
    variancia_rendimento_hab = var(rendimento_habitual,
        na.rm = TRUE
    )
)
head(sumarizando)
media_estudo mediana_idade variancia_rendimento_hab
1 6.779443 31 5721312

summarize() também pode ser usado acompanhado por group_by(). A função group_by() tem como finalidade agrupar vetores, ou seja, todas as variáveis que colocarmos dentro de uma função group_by() farão parte de um novo data.frame com apenas estas variáveis incluso.

Código
grupo <- group_by(pnad, sexo, raca)
summarize(grupo, idade = mean(anos_estudo, na.rm = TRUE))

A tibble: 9 x 3

Groups: sexo [2]

sexo raca idade
1 1 1 6.85
2 1 2 5.23
3 1 3 15
4 1 4 6.34
5 1 5 5
6 2 1 8.28
7 2 2 6.03
8 2 4 6.35
9 2 5 6.33

pipe

Imagine que queiramos um data.frame com apenas duas colunas, a UF e a idade, no entanto queremos que a idade seja em ordem decrescente. Com todas as funções que aprendemos do dplyr até agora, o processo natural para conseguir este data.frame seria:

Código
uf_idade <- select(pnad, UF, idade)
desc_idade <- arrange(uf_idade, desc(idade))
head(desc_idade)
UF idade
1 29 86
2 35 86
3 35 85
4 31 84
5 29 84
6 43 82

No entanto, uma das grandes vantagens do pacote dplyr é justamente poder fazer uma operação “atrás da outra” sem precisar fazer novas atribuições. O pipe é o operador que faz o encadeamento das funções do tidyverse. Ele irá pegar o resultado da expressão a sua esquerda e colocar como primeiro argumento da expressão da direita. Isso facilita a leitura do código, pois não precisamos fazer várias atribuições e gerar novos data.frames para chegar no resultado desejado.

Código
pipe <- pnad %>%
    select(UF, idade) %>%
    arrange(desc(idade))
head(pipe)
UF idade
1 29 86
2 35 86
3 35 85
4 31 84
5 29 84
6 43 82

A solução para aplicar diversas operações de manipulação em uma base de dados é esta: aplicar o operador pipe. Da primeira para a segunda linha, estamos aplicando a função select() na base pnad. Da segunda para a terceira linha, estamos aplicando a função arrange() na base resultante da função select(). Aqui tem mais informações sobre o pipe.

join

Uma funcionalidade muito útil do pacote dplyr é o join, que é basicamente é a junção de dois conjuntos de dados por meio de um ou mais campos em comum. O pacote dplyrpossui várias funções para juntar dados e essas funções se enquadram em duas categorias: mutating joins e filtering joins.

Mutating joins: Adicionam novas variáveis de uma tabela às observações correspondentes em outra tabela.

Existem quatro tipos de mutating joins:

  • left_join(x, y): Retorna todas as linhas de x, e todas as colunas tanto de x quanto de y.
  • right_join(x, y): Retorna todas as linhas de y, e todas as colunas tanto de uma tabela x quanto da tabela y.
  • inner_join(x, y): Retorna todas as linhas de uma tabela x onde existem valores correspondentes em y e todas as colunas de x e y.
  • full_join(x, y): Retorna todas as linhas e todas as colunas tanto de x quanto de y. Retorna NA no caso de não haver valor correspondente.

Filtering joins: As funções do tipo mutating joins comparam as observações de duas tabelas de dados para determinar quais variáveis adicionar. Em contraste, as funções do tipo filtering joins mantêm apenas as observações da primeira tabela de dados e comparam as observações com uma segunda tabela de dados para determinar quais observações manter. Uma função do tipo Filtering joins apenas removerá as observações e nunca adicionará novas observações.

Existem dois tipos de filtering joins:

  • semi_join(x, y): Mantém todas as observações em uma tabela x que têm uma correspondência em uma tabela y.
  • anti_join(x, y): Mantém todas as observações em uma tabela x que não têm correspondência em uma tabela y.

Para mais informações sobre o join: clique aqui e aqui.

Se você gostou deste post e quer saber mais sobre o pacote dplyr, vou deixar os links em que você poderá aprender um pouco mais sobre o assunto.

Referências

https://r4ds.had.co.nz/transform.html

https://livro.curso-r.com/7-2-dplyr.html