Trabalhando com Data Frames

Ana Carolina Dias
rladiesbh
8 min readAug 22, 2019

--

Uma base de dados, em geral, é feita de dados de diversas classes diferentes: por exemplo, em um banco de dados reais de clientes de uma locadora de carros, podemos ter uma coluna com os nomes dos clientes, outra com o sexo, outra com o cpf, outra com o número de vezes que esses clientes alugaram o carro. Note que essas colunas são de classes diferentes, como textos e números. Como guardar essas informações, de uma forma mais fácil do que em listas como vimos no artigo anterior ?

A resposta é: Através dos Data Frames. Basicamente, os data frames são os objetos do tipo banco de dados. Assim como as matrizes que aprendemos no artigo 3, eles também são organizados em linhas e colunas.

Então qual é a diferença entre matrizes e data frames? 😱
A diferença está na classe de objetos que eles aceitam, a matriz apenas aceita objetos do mesmo tipo (ou seja, apenas numéricos, ou apenas strings), já o data frame pode conter colunas de diferentes classes (uma coluna pode ser numérica, outra string e outra lógica, por exemplo).

Os data frames são, portanto, estruturas semelhantes aos bancos de dados convencionais usados em outros softwares onde as colunas são as variáveis e as linhas, as observações.

Exemplo de um data frame que contem informações de alunos.

Vamos iniciar os estudos, criando o nosso próprio data frame contendo as informações mostradas acimas de dentro do R. Para criar um data frame, usamos a função data.frame(). Podemos também especificar o nome das colunas (variáveis):

dados <- data.frame(
nome = c("João", "Pedro", "Amanda", "Fábio", "Fernanda", "Gustavo"),
altura = c(1.80, 1.77, 1.71, 1.65, 1.66, 1.63),
idade = c(22, 21, 18, 20, 23, 19),
sexo = c("masculino", "masculino", "feminino", "masculino", "feminino", "masculino"),
peso = c(78.3, 82.1, 66.5, 88.1, 58, 75.4),
fumante = c(TRUE, FALSE, FALSE, FALSE, TRUE, FALSE),
uf = c("PB", "AL", "PE", "PE", "SP", "CE"),
renda = c(2, 5, 10, 20, 10, NA)
)

Se nós inspecionarmos o objeto dados, podemos ver a seguinte saída no R:

Portanto, temos um banco de dados com uma estrutura semelhante ao bancos de dados disponíveis por aí.

Existe uma lista de comando úteis quando se trata sobre análise de data frames no R. Esses comando são:

  • head() — Mostra um resumo das primeiras 6 linhas do data frame como default (você pode modificar isso).
  • tail() — Mostra as últimas 6 linhas do data frame como default (você pode modificar isso).
  • dim() — Número de linhas e de colunas.
  • names() — Os nomes das colunas (variáveis).
  • str() — Estrutura do data.frame. Mostra, entre outras coisas, as classes de cada coluna.
  • cbind() — Permite adicionar novas colunas e/ou acoplar data frames lado a lado.
  • rbind() — Permite adicionar novas linhas e/ou empilhar data frames.
  • class(dados)
    head(dados)
    head(dados,2)

Como exemplo vamos observar a saída da função str() — (structure) que retornar a estrutura do nosso banco de dados.

O str() é uma das funções básicas mais importantes para começarmos a trabalhar com data frames. Essa função dá uma visão clara da estrutura do nosso objeto,o número de linhas e colunas, bem como informa os tipos de dados existentes

str(dados)

Analisando o resultado da função, podemos verificar que nosso data frame possui 6 observações e 8 variáveis. As observações e variáveis nada mais são do que nossas linhas e colunas, respectivamente. Uma outra informação importante é saber o tipo de dado que cada variável (coluna) apresenta. Podemos facilmente constatar que quatro das nossas variáveis são numéricas, três são fatores e uma delas é lógica.

Frequentemente determinada variável não está com o tipo de dado que desejamos. Às vezes é necessário converter uma variável do tipo texto em fator, ou uma variável numérica em texto, por exemplo. Isso faz todo sentido quando queremos manter um padrão em diferentes data frames.

Podemos perceber que as variável nome no banco de dados é um texto, mas foi entendida pelo R como um fator. E para evitar problemas futuros precisamos modificar a classe dessa variável. Nesse caso podemos fazer isso utilizando o comando as.character().

dados$nome #variavel deveria ser texto ao inves de fator 
str(dados$nome)
dados$nome = as.character(dados$nome)
str(dados)

Após a transformação vemos que agora a variável nome é entendida como um character (texto). Outro ponto interessante é perceber que em nosso data frame, todas as variáveis que não são numéricas ou lógicas, estão como fator.

Isso se deve especificamente ao fato do argumento stringsAsFactors estar, por padrão, com o valor TRUE. Logo, todo dado tipo texto será convertido para fator já na criação do nosso objeto. Ao mudar o argumento stringsAsFactors para FALSE na criação do nome data frame no R, esse problema não acontece.

dados =  data.frame(
nome = c("João", "Pedro", "Amanda", "Fábio", "Fernanda", "Gustavo"),
altura = c(1.80, 1.77, 1.71, 1.65, 1.66, 1.63),
idade = c(22, 21, 18, 20, 23, 19),
sexo = c("masculino", "masculino", "feminino", "masculino", "feminino", "masculino"),
peso = c(78.3, 82.1, 66.5, 88.1, 58, 75.4),
fumante = c(TRUE, FALSE, FALSE, FALSE, TRUE, FALSE),
uf = c("PB", "AL", "PE", "PE", "SP", "CE"),
renda = c(2, 5, 10, 20, 10, NA),
stringsAsFactors = FALSE
)
dados
str(dados)

Se nós inspecionarmos o objeto dados, podemos ver que a seguinte saída no R:

As variáveis nome, sexo e uf, já são consideradas como character.

Assim como nas matrizes, podemos verificar o tamanho dos data frames de diversas maneiras (mas o comando “length” não funciona, uma vez que estamos tratando de um objeto bidimensional).

nrow(dados) #numero de linhas/observcoes/casos
ncol(dados) #numero de colunas/variaveis
dim(dados) #dimensao do data frame (linhas, colunas)

Uma função muito útil para sumarizar os dados de um data frame é o comando summary(). Este comando gera uma análise resuma das variáveis que compõem o data frame.

summary(dados)

Este comando apresenta alguns resultados como o valor mínimo, médio e máximo das variáveis numéricas e verifica e conta o número de dados faltantes. Já para variáveis do tipo character essa função apenas mostra o número de observações.

Como os data frames têm linhas e colunas, existem funções separadas para adicionar ou verificar atributos de nome a cada uma delas:

  • Linhas :rownames()
  • Colunas :colnames()

O data frame sempre terá rownames e colnames. Mesmo que os nomes sejam os números das linhas e colunas.

rownames(dados) 
colnames(dados)

Obs: a função names() no data.frame trata de suas colunas, pois os elementos fundamentais do data.frame são seus vetores coluna.

names(dados)

Para renomear as linhas do data frame basta fazer:

rownames(dados) = c(“Aluno1”,”Aluno2",”Aluno3",”Aluno4",”Aluno5",”Aluno6" )
dados

O que ocorreria com o data.frame se o transformássemos em uma matriz? Vejamos:

as.matrix(dados)

Todas as variáveis viraram character! Uma matriz aceita apenas elementos da mesma classe, e é exatamente por isso precisamos de um data.frame neste caso.

Manipulando data frames

A manipulação de data frames é similar à manipulação de matrizes em muitos pontos. A seleção de elementos segue a mesma lógica.

dados
dados[3, 2] #seleciona a terceira linha da segunda coluna
dados[3:5, 2] #seleciona da terceira a quinta linha da segunda #coluna
dados[6, 2:4] #Seleciona a sexta linha e as colunas de 2 a 4
dados[1,] #Seleciona a primeira linha
dados[,1] #seleciona a primeira coluna

Podemos fazer, similar à operação com matrizes, a seleção de algumas colunas e linhas utilizando os nomes.

dados[ ,c("nome", "sexo", "uf")]
dados[ ,c("peso")]
dados["Aluno1",]
dados["Aluno5",]
dados[c('Aluno1',"Aluno5"),]

Outra maneira de selecionar variáveis em um data frame é bastante simples usando a sintaxe:dados$x . Onde dados é o data frame e x a variável que desejamos selecionar. Para selecionar todos os dados contidos na variável altura, nome e renda podemos fazer:

dados$altura
dados$nome
dados$renda

Agora se quiser selecionar um elemento dentro da coluna, deve-se fazer:

dados$altura[4] #Seleciona o quarto elemento da variável alturadados$nome[1] #Seleciona o primeiro elemento da variável nome

Outra forma alternativa de selecionar colunas em um data.frame é o [[ ]].

  • Tanto o $ quanto o [[ ]] sempre retornam um vetor como resultado.

Segue abaixo um resumo das formas de seleção de uma coluna de um data frame no R.

Criando e modificando variáveis

O processo para criar novas variáveis (colunas) em data frames é igualmente simples a outras operações.

dados$serie <- '2º Ano do Ensino Médio' #Criando uma variável 
dados
dados$altura = dados$altura^2 # Substituindo uma variável
dados

Vemos que a variável série foi criada e adicionada ao banco de dados e a variável altura foi modificada com o valor anterior de altura ao quadrado.

Outra forma de acrescentar novas informações aos bancos de dados, é utilizar os comandos rbind() para acrescentar linhas e cbind() para acrescentar colunas.

ativ_fisica = c("Sim","Sim",'Não', 'Sim', 'Não','Não')dados = cbind(dados,ativ_fisica)
dados
Fabiana = c('Fabiana', 1.72, 25, 'feminino', 69, TRUE, 'MG', 5, 'Sim')dados = rbind(dados,Fabiana)
dados

Nota-se pela saída acima que uma nova coluna (ativ_fisica) e uma nova linha ou aluna(Fabiana) foram adicionadas ao banco de dados.

Também é podemos remover colunas do nosso data frame e a forma mais segura e universal de remover qualquer elemento de um objeto do R é selecionar tudo exceto aquilo que você não deseja. Isto é, selecione todas colunas menos as que você não quer e atribua o resultado de volta ao seu data frame.

dados[,-1] #Removendo a primeira coluna nomes 
dados[-1,] # Removendo a primeira linha
dados[, c(-4, -6)] #Removendo as colunas 4 e 6

Para trabalhar com data.frames temos vários tipo de recursos diferentes e portanto muito assunto para tratar ainda. Veremos, por exemplo, além de outras funções base do R alguns pacotes importantes como dplyr, reshape2 e tidyr. Teremos outros posts separado somente para ensinar outras técnicas e formas de filtrar e selecionar variáveis no banco de dados.

Sigam as nossas redes sociais:

https://www.instagram.com/rladiesbh/

https://twitter.com/rladiesbh

https://www.facebook.com/rladiesbh

--

--

Ana Carolina Dias
rladiesbh

Mestre em Estatística | Fundadora do Descomplica Estatística e Co-Fundandora do R- Ladies BH.