Um jeito super fácil de criar e excluir colunas no R

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!

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *