Hackeando o R: fazendo um PROCV no R

No Hackeando o R de hoje, vamos mostrar como podemos replicar a PROCV do Excel no R, utilizando as funções de join do tidyverse, e mostrando como a solução de problemas mais complexos é facilitada com o uso delas. No Excel, utilizamos o PROCV básico quando queremos encontrar para cada elemento de uma tabela uma informação que está contida em outra tabela. Esse resultado pode ser replicado com a função left_join(), que pega a tabela que falta a informação, e adiciona a ela os dados da segunda tabela, para cada valor da coluna a ser procurada. Note que, no código abaixo, todas as colunas da tabela auxiliar são adicionadas, e a coluna que é procurada na base é indicada pelo argumento 'by'. Caso queira apenas a coluna pesquisada, basta fazer o join com apenas as colunas de identificação e de pesquisa.

library(tidyverse)
library(Lahman)

tabela_principal = Batting %>% select(playerID, yearID, G, AB)
tabela_auxiliar = Master %>% select(playerID, birthCountry)

head(left_join(tabela_principal, tabela_auxiliar, by = 'playerID'), copy = FALSE)

 playerID yearID G AB birthCountry
1 abercda01 1871 1 4 USA
2 addybo01 1871 25 118 CAN
3 allisar01 1871 29 137 USA
4 allisdo01 1871 27 133 USA
5 ansonca01 1871 25 120 USA
6 armstbo01 1871 12 49 USA

Há também outras funções que servem funcionalidades parecidas, como a right_join, que junta linhas da primeira tabela à segunda, inner_join, que junta apenas as linhas que preenchem os dados, e a full_join, que junta todas as linhas. Cada uma delas essencialmente utiliza a função filter() para encontrar os resultados que têm dados exatos, de modo que para replicar o uso de PROCV para apenas um valor, o mais simples seria utilizar filter(dados, nome da variável == valor procurado). É importante fazer uma ressalva: enquanto o PROCV procura resultados aproximados por padrão, a filter() só retorna resultados idênticos; ademais, o PROCV retorna o primeiro match, enquanto a filter retorna a matriz de todos os matches encontrados.

Um resultado que pode ser mais interessante para quem está interessado a começar a trabalhar com o R é a facilidade com que podemos expandir a busca do PROCV. Digamos que queremos extrair informações de uma segunda tabela, mas a identificação é feita com duas colunas de dados ao invés de uma só. Para resolver isso no Excel, teríamos que fazer uma composição de funções relativamente complicada, porém, no R a extensão é trivial. Abaixo, procuramos dados pela ID do jogador e ID do ano simultaneamente, utilizando novamente um simples left_join():

tabela_auxiliar2 = AllstarFull %>% select(playerID, yearID, GP)

left_join(tabela_principal, tabela_auxiliar2, by = c('playerID', 'yearID')) %>% drop_na() %>%
head()
 playerID yearID G AB GP
1 averiea01 1933 151 599 1
2 bartedi01 1933 152 587 1
3 bergewa01 1933 137 528 1
4 chapmbe01 1933 147 565 1
5 cronijo01 1933 152 602 1
6 crowdal01 1933 52 102 1

______________

(*) Gostou? Conheça nosso Curso de Introdução ao R para Análise de Dados.

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Análise regional do mercado de trabalho com dados do CAGED usando Python

Os microdados dos CAGED fornecem informações detalhadas a nível de cidade, sexo, raça, nível de instrução, idade, salário e outras sobre os trabalhadores formais do Brasil, possibilitando ricas análises regionais de dados. Neste artigo mostramos como acessar, processar e analisar estes dados utilizando o Python.

Transfer Learning: mostrando porque o Python está na ponta do desenvolvimento

A aprendizagem por transferência (transfer learning) é o reuso de um modelo pré-treinado em um novo problema. Portanto, sua utilização torna-se um avanço enorme para a previsão de diferentes tipos de variáveis, principalmente para aquelas ordenadas no tempo. Mostramos nesta postagem o uso do Transfer Learning com o Python para o caso de Séries Temporais.

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.