O seu Blog de Psicometria

Tenha acesso à nossa enciclopédia virtual de conhecimento em Psicometria e Análise de Dados

Junte-se a mais de 22.300 membros e receba conteúdos exclusivos e com prioridade

Como juntar bancos de dados no R com o dplyr?

Marcos Lima

jul 8, 2024

Neste post, apresentaremos um tutorial de como juntar bancos de dados no R usando o pacote dplyr.

Nós aqui usamos o termo bancos de dados como sinônimo de data.frame. Em outras palavras, um data.frame é uma estrutura de dados bidimensional, onde cada coluna representa uma variável, e cada linha representa um participante ou observação. Esse tipo de estrutura é similar às planilhas do Excel com as quais você já pode ter alguma familiaridade. Ao longo do tutorial, os termos banco de dados e data.frame serão usados de maneira intercambiável.

Descrição do problema

A princípio, assuma que você coletou dados de uma amostra em duas sessões distintas. Portanto, você possui dois bancos de dados, um para cada tempo de sua coleta de dados.

Juntar bancos de dados é relativamente simples em softwares como o Excel, pois você precisa apenas ter uma chave de identificação (como nome ou número de matrícula dos participantes) presente nos bancos de dados que deseja unir. Em seguida, ordene os bancos de dados com base na coluna contendo a chave de identificação dos participantes e copie e cole as informações do primeiro banco de dados lado a lado com o fim das colunas do segundo banco de dados.

No entanto, podem surgir dificuldades. Por exemplo, alguns participantes podem ter dados ausentes na primeira ou na segunda sessão, o que pode resultar em bancos de dados com chaves de identificação diferentes. Assim, mesmo após ordenarmos os bancos de dados com base na coluna contendo a chave de identificação, as linhas podem não estar totalmente alinhadas nos dois bancos.

Portanto, na pesquisa científica que envolve múltiplos bancos de dados, o desafio é como unir esses bancos de dados da maneira mais rápida e eficiente possível. Em seguida, demonstraremos como juntar bancos de dados no R.

O pacote dplyr

A solução que apresentaremos usará o pacote dplyr. O dplyr é um pacote da linguagem R usado para manipulação de dados, isto é, em tarefas de organização de bancos de dados que antecedem as análises estatísticas propriamente ditas.

No R, o dplyr pode ser instalado e carregado por meio do código a seguir.

# instalanco e carregando o dplyr
install.packages("dplyr")
library(dplyr)

Você deve executar o código da linha 2 uma única vez. Por outro lado, você deve executar o código da linha 3 sempre que iniciar uma nova sessão no R. Além disso, R ou RStudio ignora as linhas iniciadas com #, tratando-as como comentários durante a execução do código.

O pacote possui quatro funções principais para juntar bancos de dados no R. Ademais, cada uma delas é indicada para um tipo distinto de junção entre bancos de dados. Portanto, é importante que você saiba exatamente como cada uma delas funciona, para que escolha a ferramenta mais adequada ao seu problema.

Para entendermos o comportamento de cada uma das funções join do dplyr, criaremos dois bancos de dados simplificados.

# dados da sessão 1
sessao1 <- data.frame(ID = c("A", "B", "C", "D"),               
                      X = 1:4,
                      Y = 5:8)

# dados da sessão 2
sessao2 <- data.frame(ID = c("C", "D", "E", "F"), 
                      W = 9:12,
                      Z = 13:16)

O código anterior cria dois bancos de dados, em formato data.frame, conforme representados na Figura 1.

Figura 1. Bancos de dados usados no tutorial.

Primeiramente, cada um dos bancos de dados do tutorial tem apenas 4 casos. As colunas de identificação dos bancos de dados (ID) dos data.frames sugerem que apenas dois participantes ( identificados nas colunas ID como C e D) contribuíram com dados nas duas sessões. A sessão 1 contém as medidas X e Y, e a sessão 2, as medidas W e Z. Esses dados poderiam representar um delineamento que inicialmente coletou duas variáveis preditoras e, posteriormente, duas variáveis de resultado.

Como juntar bancos de dados no R com a função inner_join()?

Começaremos nosso tutorial pela função inner_join(). Em síntese, o inner_join():

  • Recebe dois data.frames, o primeiro sendo considerado o data.frame à esquerda, e o segundo sendo considerado o data.frame à direita;
  • Por meio do argumento by, recebe o nome de uma coluna que representa a chave de identificação que unirá os dois bancos de dados;
  • Inclui as linhas que estão contidas em ambos os data.frames ao mesmo tempo;
  • Inclui as variáveis contidas em pelo menos um dos data.frames.

Nesse sentido, concluímos que a função se assemelha à operação matemática de intersecção entre conjuntos. O código a seguir implementa o inner_join(). A Figura 2 apresenta o banco de dados resultante da aplicação da função.

# inner_join()
dados_inner <- dplyr::inner_join(sessao1, 
                                 sessao2, 
                                 by = "ID") 
Figura 2. Inner_join().

Como juntar bancos de dados no R com a função left_join()?

A função left_join():

  • Recebe dois data.frames, o primeiro sendo considerado o data.frame à esquerda, e o segundo sendo considerado o data.frame à direita;
  • Por meio do argumento by, recebe o nome de uma coluna que representa a chave de identificação que unirá os dois bancos de dados;
  • Inclui todas as linhas que estão contidas no data.frame à esquerda;
  • Inclui as variáveis contidas em pelo menos um dos data.frames;
  • Atribui valores NA às células em que não contêm observação em uma dada variável para um dado participante. No R, NA quer dizer not available, representando dados ausentes.

O código a seguir implementa o left_join(). A Figura 3 apresenta o banco de dados resultante da aplicação da função.

# left_join()
dados_left <- dplyr::left_join(sessao1,
                               sessao2,
                               by = "ID")
Figura 3. Left_join().

Como juntar bancos de dados no R com a função right_join()?

O right_join() tem um comportamento parecido com o do left_join(). O right_join():

  • Recebe dois data.frames, o primeiro sendo considerado o data.frame à esquerda, e o segundo sendo considerado o data.frame à direita;
  • Por meio do argumento by, recebe o nome de uma coluna que representa a chave de identificação que unirá os dois bancos de dados;
  • Inclui todas as linhas que estão contidas no dataframe à direita;
  • Inclui as variáveis contidas em pelo menos um dos data.frames;
  • Atribui NA às células em que não contêm observação em uma dada variável para um dado participante.

O código a seguir implementa o right_join(). A Figura 4 apresenta o banco de dados resultante da aplicação da função.

# right_join()
dados_right <- dplyr::right_join(sessao1,
                                 sessao2,
                                 by = "ID")
Figura 4. Right_join().

Como juntar bancos de dados no R com a função full_join()?

Por fim, o full_join():

  • Recebe dois data.frames, o primeiro sendo considerado o data.frame à esquerda, e o segundo sendo considerado o data.frame à direita;
  • Por meio do argumento by, recebe o nome de uma coluna que representa a chave de identificação que unirá os dois bancos de dados;
  • Inclui as linhas contidas em pelo menos um dos data.frames;
  • Inclui as variáveis contidas em pelo menos um dos data.frames;
  • Atribui NA às células em que não contêm observação em uma dada variável para um dado participante.

Neste último caso, o banco de dados resultante irá conter todos os participantes da pesquisa, independentemente de terem contribuído ou não em todas as sessões com dados. O código a seguir implementa o full_join(). A Figura 5 apresenta o banco de dados resultante da aplicação da função.

# full_join()
dados_full <- dplyr::full_join(sessao1,
                               sessao2,
                               by = "ID")
Figura 5. Full_join().

Como usar o join com bancos de dados contendo variáveis com nomes iguais?

No cenário hipotético deste tutorial, coletamos as variáveis X e Y na sessão 1, enquanto as variáveis W e Z foram coletadas na sessão 2. No entanto, suponha que a pesquisa coletou apenas as variáveis X e Y nas duas sessões. Tal situação acontece em delineamentos de medidas repetidas.

No novo cenário, portanto, teríamos conflito de variáveis. Desse modo, as funções join do pacote dplyr resolveriam a ambiguidade nos nomes das colunas acrescentando um .x no final dos nomes das variáveis do data.frame à esquerda, e um .y nos nomes das variáveis do data.frame à direita. Veja o que aconteceria, por exemplo, se usássemos o inner_join(), conforme ilustrado no banco de dados da Figura 6.

Figura 6. Resultado do inner_join() ao ser aplicado em data.frames com colunas com nomes iguais.

No entanto, vale notar que todas as funções join têm um argumento opcional suffix que, por padrão, recebe uma lista com os valores .x e .y. Podemos mudar esse comportamento para termos nomes mais informativos.

# renomeando colunas de sessao2
# agora nomes das colunas coincidirão nos dois data.frames
colnames(sessao2) <- c("ID", "X", "Y")
teste <- dplyr::inner_join(sessao1,
                          sessao2,
                          by = "ID",
                          suffix = c("_sessao1",
                                     "_sessao2")) 

E eis o novo resultado na Figura 7.

Figura 7. Inner_join() usando o parâmetro opcional suffix.

Em síntese, um vetor é passado como parâmetro para suffix. Sempre que a função join encontrar colunas com conflito de nomes nos dois data.frames, ela acrescentará ao final do nome original o sufixo sessao1 às colunas do data.frame à esquerda, e o sufixo _sessao2 às scolunas do data.frame à direita. Por outro lado, as colunas sem conflitos de nomes nos dois bancos de dados não receberão os sufixos.

Conclusão

Neste post, você aprendeu como juntar bancos de dados com o R usando o pacote dplyr.

Se você quer saber mais sobre a Psicometria Online Academy, acesse nosso site. Conheça toda nossa estrutura aqui e nunca mais passe trabalho sozinho(a).

Referência

Wickham, H., Çetinkaya-Rundel, M., & Grolemund, G. (2023). R for data science: Import, tidy, transform, visualize, and model data (2nd ed.). O’Reilly.

Como citar este post

Lima, M. (2024, 8 de julho). Como juntar bancos de dados no R com o dplyr? Blog Psicometria Online. https://www.blog.psicometriaonline.com.br/como-juntar-bancos-de-dados-no-r

Bruno Figueiredo Damásio

Sou Psicólogo, mestre e doutor em Psicologia. Venho me dedicando à Psicometria desde 2007.

Fui professor e chefe do Departamento de Psicometria da UFRJ durante os anos de 2013 a 2020. Fui editor-chefe da revista Trends in Psychology, da Sociedade Brasileira de Psicologia (SBP) eEditor-Associado da Spanish Journal of Psychology, na sub-seção Psicometri e Métodos Quantitativos.

Tenho mais de 50 artigos publicados e mais de 3000 citações, nas melhores revistas nacionais e internacionais.

Compartilhe sua opinião sobre este post

Posts sugeridos

Como criar gráficos no R com o ggplot2?

Como reestruturar o formato do banco de dados no R?

Modelagem por equações estruturais no R: conceitos e aplicações

Conteúdo

Mais lidos

Como criar gráficos no R com o ggplot2?

Quais pacotes usar na análise fatorial exploratória no R?

Como reestruturar o formato do banco de dados no R?

Por que aprender a programar em R?

Postados recentemente

Como criar gráficos no R com o ggplot2?

Quais pacotes usar na análise fatorial exploratória no R?

Como reestruturar o formato do banco de dados no R?

Por que aprender a programar em R?

Deseja se tornar completamente autônomo e independente na análise dos seus dados?

Junte-se a mais de 22.300 membros e receba conteúdos exclusivos e com prioridade

Bruno Figueiredo Damásio

Sou Psicólogo, mestre e doutor em Psicologia. Venho me dedicando à Psicometria desde 2007.

 

Fui professor e chefe do Departamento de Psicometria da UFRJ durante os anos de 2013 a 2020. Fui editor-chefe da revista Trends in Psychology, da Sociedade Brasileira de Psicologia (SBP) eEditor-Associado da Spanish Journal of Psychology, na sub-seção Psicometri e Métodos Quantitativos.

 

Tenho mais de 50 artigos publicados e mais de 3000 citações, nas melhores revistas nacionais e internacionais. Atualmente, me dedico a formação de novos pesquisadores, através da Psicometria Online Academy. Minha missão é ampliar a formação em Psicometria no Brasil e lhe auxiliar a conquistar os seus objetivos profissionais.

Compartilhe sua opinião sobre este post

Posts sugeridos

Como criar gráficos no R com o ggplot2?

Como reestruturar o formato do banco de dados no R?

Modelagem por equações estruturais no R: conceitos e aplicações

Categorias

Cadastre-se para ser notificado com o link das aulas ao vivo:

Módulo 4: Redes neurais artificiais

• Introdução a Deep Learning

• Avaliando sistemas de Deep Learning

• Redes Neurais feitas (sem programação) no SPSS

• Aula bônus: O futuro da IA na Sociedade

• Aula bônus: Dois Estudos de Caso 

Módulo 3: Interpretar e reportar resultados

• Gerar, interpretar e reportar resultados em Machine Learning

Módulo 2: Criando o seu sistema

• Selecionando algoritmos e métodos 
• Práticas de Machine Learning (Sem programação): Decision Tree (JASP), Linear Discriminant Classification (JASP) e Plataforma ORANGE
• Aula Bônus: Avaliação Psicológica e Machine Learning
• Aula Bônus: Livros e Cursos recomendados  
• Aula Bônus: Entrevista com Cientista de Dados focado na área da Saúde

Módulo 1: O que é Machine Learning

• O que é Machine Learning?
• Como a máquina aprende?
• Machine Learning para Psicometria e Pesquisa Quantitativa (pesquisas comentadas)
• Tipos de Machine Learning (Supervisionado e Não-supervisionado)
• Práticas de Machine Learning (Sem programação): JASP e SPSS
Aula Bônus: Filosofia da Inteligência Artificial
• Aula Bônus: Entrevista com Cientista de Dados graduado em Psicologia
• Aula bônus: Estudo de Caso sobre Redução Dimensional 

Preencha abaixo para
participar gratuitamente

Fique tranquilo, não utilizaremos suas informações de contato para enviar qualquer tipo de SPAM. Os dados coletados são tratados nos termos da Lei Geral de Proteção de Dados e você pode se descadastrar da nossa lista de contatos a qualquer momento.