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.