Manipular dados no R é super prático desde sempre. Mas há uma função em especial que eu tenho grande apreço, pois não apenas é fácil de utilizar, mas a sintaxe é extremamente intuitiva. As funções que serão vistas aqui servem para criar novas colunas de diversas formas, novas colunas com base na soma ou outra operação com colunas existentes, pegando o valor da linha anterior ou posterior, soma cumulativa, percentual por linha, dentre outras coisas. Sem mais delongas, vamos falar do mutate() e do transmute()!
dplyr é um dos melhores pacotes para limpar e alterar tabelas no R. E uma coisa que você precisa quando está lidando com dados é de criar ou excluir novas colunas. Tanto mutate(), quanto transmute(), servem para isso. Enquanto o primeiro mantém a coluna utilizada como referência, o segundo a exclui. Aqui, abordaremos somente o mutate(), fica de lição de casa utilizar o transmute da mesma forma que vamos utilizar o mutate(). Vamos aos exemplos práticos…
Primeiro, carregamos a biblioteca e verificamos algumas linhas do dataset que será utilizado, o iris, que já vem no R e nem precisa ser carregado:
install.packages('dplyr') library('dplyr) head(iris)
Agora, vamos criar uma coluna que será o comprimento da sépala somado ao da pétala:
iris_2 = iris %>% select(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width, Species) %>% mutate(soma_comprimento = Sepal.Length + Petal.Length) head(iris_2)
Veja que simples, você só precisa passar a fórmula da criação da nova coluna dentro da função mutate().
Em tempo, se você se confundiu com o operador pipe (%>%), veja o post Tweet: Operador Pipe (%<%) no R. Mas não tem segredo, ele pega o que está a esquerda para usar como input para o que está na direita. Ou seja, o operador pegou a tabela iris e utilizou como input para fazer o select, e na sequência usar o mutate().
A função ainda pode servir para que você exclua uma coluna, basta atribuir NULL à coluna que deseja excluir. No exemplo abaixo, excluímos a coluna que acabamos de criar:
iris_3 = iris_2 %>% mutate(soma_comprimento = NULL) head(iris_3)
Por default, as colunas mantidas são todas, porém, você pode usar o parâmetro .keep e escolher quais devem ser mantidas. Ao utilizar used, você mantém somente as utilizadas:
iris_2 = iris %>% mutate(soma_comprimento = Sepal.Length + Petal.Length, .keep='used') head(iris_2)
Ou manter só as que não foram utilizadas na criação da nova coluna:
iris_2 = iris %>% mutate(soma_comprimento = Sepal.Length + Petal.Length, .keep='unused') head(iris_2)
E ainda controlar onde a(s) nova(s) coluna(s) deve aparecer, se é antes (before) ou depois (after) das demais. Veja um exemplo com a criação de duas novas colunas:
iris_2 = iris %>% mutate(soma_comprimento = Sepal.Length + Petal.Length, multiplica_comprimento = Sepal.Length * Petal.Length, .before = Species) head(iris_2)
Imagine agora que você queira pegar o valor da linha anterior ou da posterior? Isso é interessante quando você está acompanhando algum tipo de evolução ao longo do tempo. E é muito fácil fazer, basta combinar o mutate() com o lag() ou lead():
iris_2 = iris %>% mutate(soma_comprimento = Sepal.Length + Petal.Length, multiplica_comprimento = Sepal.Length * Petal.Length, proximo_comprimento_petala = lead(Petal.Length), anterior_comprimento_petala = lag(Petal.Length), .before = Petal.Width) head(iris_2)
Agora, vamos trocar de dataset e utilizar USArrests, que contém dados das prisões feitas nos Estados Unidos. No entanto, para não complicar demais, utilizaremos somente as primeiras 5 linhas. Criamos então o objeto USArrests_amostra:
USArrests_amostra = USArrests[1:5,] USArrests_amostra
Vamos obter aqui o rank percentil (acima de quantos % o valor está) e também a soma cumulativa, novamente utilizando o mutate():
Por fim, você pode criar colunas com base em condicionais. Imagine que você queira classificar estados com mais de 9 assassinatos como perigosos e os demais como seguros. Bastaria usar o case when():
USArrests_amostra_2 = USArrests_amostra %>% mutate(seguranca = case_when(Murder > 9 ~ 'perigoso', Murder <= 9 ~ 'seguro')) USArrests_amostra_2
Todas as funções que podem ser utilizadas:
- +, -, log(), etc., for their usual mathematical meanings
- lead(), lag()
- dense_rank(), min_rank(), percent_rank(), row_number(), cume_dist(), ntile()
- cumsum(), cummean(), cummin(), cummax(), cumany(), cumall()
- na_if(), coalesce()
- if_else(), recode(), case_when()
Bem fácil, ein?
Gostou do conteúdo? Se inscreva para receber as novidades! Deixe seu e-mail em INSCREVA-SE na barra à direita, logo abaixo de pesquisar. E, por favor, não deixe de comentar, dar seu feedback e compartilhar com seus amigos. De verdade, isso faz toda a diferença. Você também pode acompanhar mais do meu trabalho seguindo a conta de Twitter @EstatSite ou por alguma das redes que você encontra em Sobre o Estatsite / Contato, como meu canal de Youtube Canal do Yukio.
Bons estudos!