Fundamentos da linguagem R

rpubs.com/brunamdalmoro/fundamentos_R

Introdução

Quem sou eu?

Bruna Martini Dalmoro

Bacharela em Estatística (UFRGS)

Mestra em Ciência da Computação (PUCRS)

Cientista de Dados no Sicredi desde 2018

Organizadora do R-Ladies POA

Apaixonada por R desde 2013

Quem são vocês?

  • Nome
  • Formação
  • Com o que trabalha
  • Sabe programar? Qual linguagem?
  • Conhece o R?
  • Uma curiosidade sobre você

O que é o R?

O R é uma linguagem de programação desenvolvido especialmente para cálculos estatísticos e criação de gráficos.

  • Criada no início dos anos 1990 por Ross Ihaka e Robert Gentleman;
  • Dois estatísticos da Universidade de Auckland, Nova Zelândia;
  • Inspirada na linguagem S.

Vantagens

  • Foco em Estatística e Ciência de Dados
  • Ferramentas de Visualização de Dados
  • Gratuito e de Código Aberto
  • Ecossistema de Pacotes
  • Comunidade Ativa e Recursos Abertos
  • Suporte à Pesquisa Científica
  • Integração com outras tecnologias

Comunidade R

A comunidade R é uma das maiores forças do ecossistema R. Ela é colaborativa, ativa e global, e não só contribui com pacotes e tutoriais, como também é conhecida por sua abertura, inclusão e foco educacional.

Artwork by @allison_horst

Instalação

  1. Acesse o site do R Project
  2. Escolha o “espelho” mais adequado
  3. Selecione a versão mais adequada de acordo com o sistema operacional
  4. Ao baixar o R pela primeira vez, escolha a opção “base”
  5. Baixe e instale o R
  6. Vá ao site da Posit, baixe e instale o RStudio

RStudio

O RStudio é um ambiente de desenvolvimento integrado (IDE) para a linguagem R. Ele foi criado para tornar o uso do R mais fácil, produtivo e acessível.

https://docs.posit.co/ide/user/ide/get-started/

RStudio Cloud

Uma maneira de acessar o RStudio de qualquer lugar, sem precisar instalar no computador.

  1. Acesse posit.cloud
  2. Crie sua conta
  3. Inicie um projeto

Warning

Há limitações de tempo (25h/mês) e processamento no plano gratuito.

Sintaxe básica

Operadores

Você pode usar o R para fazer cálculos matemáticos básicos:

Experimente! Execute no seu computador:

1+1
2*5
3^2
(2+4+6)/3
2+4+6/3

Operadores

Você pode usar o R para fazer cálculos matemáticos básicos:

1+1
[1] 2
2*5
[1] 10
3^2
[1] 9
(2+4+6)/3
[1] 4
2+4+6/3
[1] 8

Note

Linguagens como o C ou Java necessitam que o código seja compilado antes de executar. No R, isso não é necessário. O R é uma linguagem de programação dinâmica que interpreta o código enquanto você o executa.

Ordem dos operadores

  1. Parênteses ()
  2. Exponenciação ^
  3. Multiplicação * e Divisão /
  4. Adição + e Subtração -
2 + 3 * 4       # Multiplicação primeiro: 3*4=12; depois soma: 2+12=14
(2 + 3) * 4     # Parênteses primeiro: 2+3=5; depois multiplica: 5*4=20
2 + 3 + 4 / 2   # Divisão primeiro: 4/2=2; depois soma: 2+3+2=7
2^2 + 3         # Exponenciação primeiro: 2^2=4; depois soma: 4+3=7

Tip

Sempre utilize parênteses!

Operações Aritméticas Básicas no R

Operação Símbolo Exemplo Resultado
Adição + 2 + 3 5
Subtração - 7 - 4 3
Multiplicação * 5 * 2 10
Divisão / 10 / 2 5
Potência ^ 2 ^ 3 8
Módulo (resto) %% 7 %% 3 1
Divisão inteira %/% 7 %/% 3 2

Operador de atribuição

Você pode criar objetos com o operador de atribuição <-:

x <- 3^2

Note

Note que o valor de x não é impresso, ele é apenas armazenado. Perceba também que foi criado um item no environment.

Para ver o que foi armazenado no objeto, basta “chamá-lo”:

x
[1] 9

Operador de atribuição

Existem outras formas de fazer atribuição, além de <-.

Por exemplo:

texto = 'Tambem podemos armazenar texto em objetos'
texto
[1] "Tambem podemos armazenar texto em objetos"

Ou ainda:

'Dessa forma também funciona' -> texto_2
texto_2
[1] "Dessa forma também funciona"

Tip

Boas práticas: Prefira sempre ter o nome do objeto no início do código e utilize o atribuidor <-. Essa é a forma mais comum, deixa o código mais claro e fácil de entender.

Operações com objetos

Podemos usar os objetos armazenados para fazer operações:

x
[1] 9
y <- x * 2
y
[1] 18
x + y
[1] 27
y
[1] 18
y <- 10
y
[1] 10
y <- 'Agora aqui tem um texto'
y
[1] "Agora aqui tem um texto"

Comentários em R

O R ignorará qualquer texto após # em uma linha. Isso permite que você escreva comentários. Eles não afetarão seu código, mas são muito úteis para descrever brevemente o que o código a seguir faz.

# Este é um comentário!

# Armazenando a soma de dois valores
z <- 2025 + 50

# Exibindo o resultado da soma
z
[1] 2075

Tip

Use comentários sem moderação! Descrever o que cada parte do código faz e por que facilita o entendimento do código, seja por você mesmo ou por outra pessoa.

Nomes dos objetos

No R, o nome dos objetos devem começar sempre com letras, e só podem conter letras, números, _ e ..

1_nome <- 'Bruna'     #errado
_nome <- 'Bruna'      #errado
meu-nome <- 'Bruna'   #errado
meu_nome <- 'Bruna'   #agora sim!

Além disso, é importante que os nomes dos seus objetos sejam descritivos, então é recomendado adotar uma convenção quando o nome do objeto contém várias palavras.

eu_uso_snake_case
outrasPessoasUsamCamelCase
algumas.pessoas.usam.pontos
E_aLgumas.Pessoas_nAoUsamConvencao

Erros comuns

  • R é case sensitive
A <- 15
a
# Erro: objeto 'a' não encontrado
  • Inclusão de espaços indevidamente
b < - 15
# Erro: objeto 'b' não encontrado
  • Esquecer de completar o comando
x /
# +
3 * (2 + 6 + 4
# +

Tip

Evite usar acentos, til e cedilha. Isso pode gerar erros de encoding.

Erros no R

É importante aprendermos a conviver com nossos erros!

Artwork by @allison_horst

Exercícios #1

  1. Crie um novo R script para os exercícios da aula de hoje e salve.
  2. Crie pelo menos 4 diferentes objetos com informações sobre você (nome, idade, curso, cidade onde mora, etc.). Forneça nomes adequados aos objetos que você criar.
  3. Multiplique a sua idade por 12 e salve o resultado em um objeto chamado idade_em_meses. Em seguida, multiplique esse objeto por 30 e salve o resultado em um objeto chamado idade_em_dias.

Funções

O que são funções

Funções são blocos de código que executam uma tarefa específica.

Elas recebem valores de entrada (chamados de argumentos), realizam algum processamento e retornam um resultado (também chamado de saída).

Estrutura de uma função:

nome_da_funcao(argumento1 = valor1, argumento2 = valor2, …)

Exemplos de funções

a <- 9 
b <- 'sou um texto'

print(a) 
[1] 9
print(b)
[1] "sou um texto"

Uma função pode receber um argumento, vários argumentos, ou nenhum argumento!

hoje <- 'Data de hoje:' 
data <- Sys.Date()

data_de_hoje <- paste(hoje, data) 

data_de_hoje
[1] "Data de hoje: 2025-07-13"

Algumas funções básicas

Função Descrição
print() Exibe um valor ou resultado na tela
length() Retorna o número de elementos em um vetor ou lista
sum() Calcula a soma de valores
mean() Calcula a média aritmética dos valores
min() Retorna o menor valor
max() Retorna o maior valor
seq() Gera uma sequência de números
rep() Repete elementos um número específico de vezes
paste() Junta textos (strings) com separadores definidos
sqrt() Calcula a raiz quadrada de um número
round() Arredonda um número para um número específico de casas decimais
ls() Lista todos os objetos no ambiente
rm() Remove um ou mais objetos do ambiente

Ajuda

Caso você não conheça determinada função, tenha dúvidas do seu funcionamento ou de quais parâmetros você precisa passar para ela, você pode acessar a documentação de ajuda diretamete no RStudio!

Basta digitar:

?nome_da_funcao

Note que não usamos os parênteses, apenas onome da função!

Tip

Funções são o coração do R. Daqui para frente, usaremos funções o tempo todo!

Exercícios #2

  1. Usando os objetos criados no primeiro exercício, salve em um novo objeto e depois “imprima” um breve texto de apresentação.
  2. Calcule o número de ouro, dado pela expressão: \[\frac{1 + \sqrt{5}}{2}\]
  3. Use a documentação de ajuda no R para entender as funções seq() e rep(). O que estas funções fazem? Quais são os argumentos esperados? Execute um exemplo.

Tipos de dados

Existem diferentes tipos de dados (ou classes) que podemos armazenar em objetos no R, como números, textos, lógicos, fatores, datas, entre outros.

É muito importante identificar o tipo de dado que estamos trabalhando, pois cada tipo de dado permite usar funções específicas.

A função class() permite verificar a classe de um objeto.

Numéricos

Os objetos numéricos no R podem ser de dois tipos:

  • numéricos (numeric ou double): armazena números que podem conter casas decimais.
x <- 4.5
y <- 1/6
class(x)
[1] "numeric"
class(y)
[1] "numeric"
  • inteiros (integer): armazena apenas números inteiros, ou seja, sem casas decimais.
z <- 4L
class(z)
[1] "integer"

Texto

O tipo character (ou também conhecido como string) armazena textos. Tudo que for escrito entre aspas será considerado um texto.

t1 <- "Meu nome é Bruna"
t2 <- '2025'
class(t1)
[1] "character"
class(t2)
[1] "character"

Note

Na maior parte do tempo, o R entende aspas simples e aspas duplas da mesma maneira.

Lógico

O tipo lógico (logical) armazena valores booleanos: TRUE (verdadeiro) ou FALSE (falso). Os valores binários podem ser convertidos para números, onde TRUE será 1, e FALSE será 0.

l1 <- 1 == 1
l2 <- TRUE
l3 <- 3 > 9
class(l1)
[1] "logical"
class(l2)
[1] "logical"
class(l3)
[1] "logical"

Operadores lógicos

Operação Símbolo Exemplo Resultado
Igualdade == 3 == 3 TRUE
Diferença != 3 != 2 TRUE
Maior que > 5 > 2 TRUE
Menor que < 1 < 4 TRUE
Maior ou igual >= 4 >= 4 TRUE
Menor ou igual <= 2 <= 1 FALSE
E (lógico) & TRUE & FALSE FALSE
Ou (lógico) | TRUE | FALSE TRUE
Negação lógica ! !TRUE FALSE

Data

O tipo data (Date) armazena datas no formato aaaa-mm-dd (ano-mês-dia).

d1 <- Sys.Date()
class(d1)
[1] "Date"

Para criarmos um objeto do tipo data, precisamos converter um texto para data:

d2 <- as.Date('2025-06-21')
class(d2)
[1] "Date"

Há outros tipos e formatos de data, mas deixemos isso para o futuro…

Fator

O tipo fator (factor) armazena variáveis categóricas. Os valores possíveis de categoria são chamados de levels. Os fatores podem ser ordenados ou não ordenados.

Os fatores são muito úteis para a visualização de dados e para alguns modelos de análise de dados.

Eis um exemplo de fator:

cores <- c("vermelho", "verde", "azul", "vermelho", "verde", "verde")
f <- as.factor(cores)
f
[1] vermelho verde    azul     vermelho verde    verde   
Levels: azul verde vermelho
class(f)
[1] "factor"

Identificação de tipos

Além da função class(), outra forma de identificar se um objeto é de determinado tipo é:

z 
[1] 4
is.numeric(z)
[1] TRUE
is.double(z)
[1] FALSE
is.integer(z)
[1] TRUE
is.character(z)
[1] FALSE

Exercício: O resultado da função is.numeric() é que que tipo?

Conversão de tipos

E podemos converter o objeto de um tipo em outro:

class(z) 
[1] "integer"
z <- as.character(z)
class(z)
[1] "character"
z
[1] "4"

Porém - atenção! -, nem toda conversão fará sentido!

as.numeric("2025")
[1] 2025
as.numeric("Bruna")
[1] NA

Valores faltantes

Valores faltantes, conhecidos também como missing values, são valores que não estão disponíveis, ou que não foram informados. No R, esses valores são representados pelo valor NA (Not Available).

Algo importante é que o R não consegue fazer operações matemáticas com valores NA. Por exemplo, se tentarmos realizar qualquer operação matemática com NA, o resultado será NA:

NA + 1
[1] NA
NA + NA
[1] NA
NA * 2
[1] NA
5 > NA
[1] NA

Valores faltantes

É importante identificar os valores NA em nossos dados, pois eles podem afetar o resultado de nossas análises.

is.na(NA)
[1] TRUE
is.na(2)
[1] FALSE
is.na(1 + NA)
[1] TRUE

Futuramente entenderemos como lidar melhor com esses valores faltantes!

Estruturas de dados

Estruturas de dados em R

No R, estruturas de dados são formas de organizar e armazenar informações para facilitar a análise. Cada estrutura tem características próprias e é adequada para diferentes tipos de tarefas.

  • Vetor
  • Matriz
  • Array
  • Lista
  • Dataframe

Vetor

Vetores armazenam um conjunto de valores de uma dimensão. Eles podem ser criados com a função c(), que significa combine (combinar).

vetor <- c(1, 3, 5, 7, 9)
vetor
[1] 1 3 5 7 9

Os vetores podem armazenar diferentes tipos de dados. Porém cada vetor pode armazenar apenas um tipo de dado por vez.

vetor2 <- c(1, 2, 3, 'quatro', 5)
vetor2
[1] "1"      "2"      "3"      "quatro" "5"     

Outras formas de criar vetores

# Vetor de 1 a 10
1:10

# Vetor de 10 a 1
10:1

# Vetor via rep()
rep(8,5)

# Vetor via seq()
seq(0,1,0.1)

Outras formas de criar vetores

# Vetor de 1 a 10
1:10
 [1]  1  2  3  4  5  6  7  8  9 10
# Vetor de 10 a 1
10:1
 [1] 10  9  8  7  6  5  4  3  2  1
# Vetor via rep()
rep(8,5)
[1] 8 8 8 8 8
# Vetor via seq()
seq(0,1,0.1)
 [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

Operações com vetores

# Aritméticas
vetor + 100 
vetor * 10
vetor + vetor

# Lógicas
vetor > 3
vetor == vetor2

# Funções
length(vetor)
sum(vetor)
mean(vetor)

Operações com vetores

# Aritméticas
vetor + 100 
[1] 101 103 105 107 109
vetor * 10
[1] 10 30 50 70 90
vetor + vetor
[1]  2  6 10 14 18
# Lógicas
vetor > 3
[1] FALSE FALSE  TRUE  TRUE  TRUE
vetor == vetor2
[1]  TRUE FALSE FALSE FALSE FALSE
# Funções
length(vetor)
[1] 5
sum(vetor)
[1] 25
mean(vetor)
[1] 5

Indexação de vetores

Vetores são conjuntos indexados, ou seja, conseguimos acessar individualmente cada valor de um vetor de acordo com sua posição.

Para isso, colocamos o índice da posição que queremos acessar dentro de colchetes [].

vetor
[1] 1 3 5 7 9
# Primeiro elemento do vetor
vetor[1]
[1] 1
# Quarto elemento do vetor
vetor[4]
[1] 7
# Sexto elemento do vetor
vetor[6]
[1] NA

Indexação de vetores

Usando a indexação, podemos substituir valores!

vetor
[1] 1 3 5 7 9
vetor[1] <- 10
vetor
[1] 10  3  5  7  9

Note

Importante! No R, o primeiro elemento de um vetor sempre é o de índice 1. Não há índice zero no R!

# ?
vetor[0]
numeric(0)

Exercícios #3

  1. Guarde em um objeto a sequência de números de 0 a 5 e resolva os itens abaixo.
    1. Faça o R imprimir o primeiro número dessa sequência. Em seguida, faça o R imprimir o último.
    2. Tranforme este vetor em números negativos.
  2. Crie um vetor com o nome de três frutas, guarde em um objeto chamado frutas.
    1. Utilize a a função length() para verificar o tamanho do vetor.
    2. Inspecione a saída de paste("eu gosto de", frutas). O tamanho do vetor mudou?
  3. Considere o vetor a seguir, que contém as informações de uma semana: dolar_subiu <- c(TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE) indicando se o dólar subiu (TRUE) ou não subiu (FALSE) no respectivo dia. Interprete o resultado dos códigos abaixo:
    1. length(dolar_subiu)
    2. dolar_subiu[2]
    3. sum(dolar_subiu)
    4. mean(dolar_subiu)

Matriz

Matrizes são como os vetores, porém com uma dimensão a mais, dividindo os dados em linhas e colunas.

A <- matrix( c(1, 2, 3, 4, 5, 6), nrow = 2)
A
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
B <- matrix( 6:1, nrow = 2, byrow = TRUE )
B
     [,1] [,2] [,3]
[1,]    6    5    4
[2,]    3    2    1

Operações com matrizes

Tipo de operação Exemplo O que faz / resultado
Soma de matrizes A + B Soma elemento a elemento
Subtração de matrizes A - B Subtrai elemento a elemento
Multiplicação elemento a elemento A * B Multiplica elemento a elemento
Multiplicação matricial (algebra linear) A %*% B Produto de matrizes
Transposta t(A) Troca linhas por colunas
Determinante det(A) Determinante da matriz
Inversa solve(A) Matriz inversa (se existir)
Indexação A[1,2] Elemento na 1ª linha, 2ª coluna
Submatriz A[1:2, ] Subconjunto: primeiras 2 linhas

Experimente!

Funções úteis com matrizes

Função O que faz Exemplo
dim() Retorna as dimensões dim(A)
nrow() Número de linhas nrow(A)
ncol() Número de colunas ncol(A)
rowSums() Soma dos elementos de cada linha rowSums(A)
colSums() Soma dos elementos de cada coluna colSums(A)
rowMeans() Média dos elementos de cada linha rowMeans(A)
colMeans() Média dos elementos de cada coluna colMeans(A)
apply() Aplica função a linhas ou colunas apply(A, 1, sum)

Experimente!

Sobre matrizes

Da mesma forma que vetores, matrizes podem armazenar diferentes tipos de dados, mas cada matriz pode armazenar apenas um tipo de dado por vez.

Se tratando de análise de dados, isso é pouco útil. Por isso foi criado uma estrutura de dados mais versátil: o dataframe!

Bem-vindos ao R!

Dataframes

Dataframe

Os dataframes são conjuntos de valores com duas dimensões: linhas e colunas. Porém, diferente do que vimos para as matrizes, os dataframes podem armazenar diferentes tipos de dados em cada coluna.

Esse é o principal tipo de objeto que utilizaremos no R, pois ele é muito útil para armazenar dados tabulares!

# Criando alguns vetores
a <- c('a', 'b', 'c', 'd')
b <- 1:4
c <- b > 2

# Criando o dataframe a partir do vetores
meu_dt <- data.frame(letras = a, numeros = b, logicos = c)
meu_dt
  letras numeros logicos
1      a       1   FALSE
2      b       2   FALSE
3      c       3    TRUE
4      d       4    TRUE

Dataframe

Existem alguns dataframes já criados no R, como o airquality, que armazena dados sobre a qualidade do ar na cidade de Nova York, em 1973. Essas são as primeiras linhas do dataframe:

# Primeiras 6 linhas do dataframe
head(airquality)
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6

Para saber mais sobre os dados, digite ?airquality.

Estrutura do dataframe

Existem algumas funções úteis para entendermos qual a estrutura de um dataframe:

# Número de colunas
ncol(airquality)
[1] 6
# Número de linhas
nrow(airquality)
[1] 153
# Dimensões
dim(airquality)
[1] 153   6
# Nomes das colunas de um dataframe
names(airquality)
[1] "Ozone"   "Solar.R" "Wind"    "Temp"    "Month"   "Day"    
# Tipo de dados das colunas
str(airquality)
'data.frame':   153 obs. of  6 variables:
 $ Ozone  : int  41 36 12 18 NA 28 23 19 8 NA ...
 $ Solar.R: int  190 118 149 313 NA NA 299 99 19 194 ...
 $ Wind   : num  7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
 $ Temp   : int  67 72 74 62 56 66 65 59 61 69 ...
 $ Month  : int  5 5 5 5 5 5 5 5 5 5 ...
 $ Day    : int  1 2 3 4 5 6 7 8 9 10 ...
# Resumo das colunas
summary(airquality)
     Ozone           Solar.R           Wind             Temp      
 Min.   :  1.00   Min.   :  7.0   Min.   : 1.700   Min.   :56.00  
 1st Qu.: 18.00   1st Qu.:115.8   1st Qu.: 7.400   1st Qu.:72.00  
 Median : 31.50   Median :205.0   Median : 9.700   Median :79.00  
 Mean   : 42.13   Mean   :185.9   Mean   : 9.958   Mean   :77.88  
 3rd Qu.: 63.25   3rd Qu.:258.8   3rd Qu.:11.500   3rd Qu.:85.00  
 Max.   :168.00   Max.   :334.0   Max.   :20.700   Max.   :97.00  
 NA's   :37       NA's   :7                                       
     Month            Day      
 Min.   :5.000   Min.   : 1.0  
 1st Qu.:6.000   1st Qu.: 8.0  
 Median :7.000   Median :16.0  
 Mean   :6.993   Mean   :15.8  
 3rd Qu.:8.000   3rd Qu.:23.0  
 Max.   :9.000   Max.   :31.0  
                               

Indexação em dataframes

Como em matrizes, devemos usar dois índices para acessar os valores de um dataframe.

# Primeira linha, terceira coluna
airquality[1,3]
[1] 7.4
# Primeira e quarta linhas, segunda coluna
airquality[c(1,4) , 2]
[1] 190 313
# Segunda linha, todas as colunas
airquality[2, ]
  Ozone Solar.R Wind Temp Month Day
2    36     118    8   72     5   2

Seleção de colunas

Muitas vezes trabalhamos com apenas uma coluna do dataframe, e para isso precisamos selecioná-la. Eis algumas formas:

## Selecionando a coluna Ozone
# Via índices
airquality[ , 1]
airquality[ , "Ozone"] 

# Via operador $
airquality$Ozone

Filtrando dataframes

É degrande utilidade sabermos filtrar os dataframes para explorarmos nossos dados! Há algumas formas de fazer isso:

## Uma condição
# Temp for menor que 60
airquality[airquality$Temp < 60, ]

# Dados dados faltantes na coluna Ozone
airquality[is.na(airquality$Ozone), ]

# Mês de junho 
subset(airquality, Month == 6)

## Mais de uma condição
# Mês de julho, dias de 1 a 5
airquality[airquality$Month == 7 & airquality$Day <= 5, ]

# Temp acima de 90 e sem dados faltantes em Ozone
subset(airquality, Temp > 90 & !is.na(Ozone))

Criando novas colunas

Nos dataframes, podemos facilmente criar novas colunas!

# Criando a coluna de temperatura em Celsius
airquality$TempCelsius <- (airquality$Temp - 32) * (5/9)

# Cinco primeiras linhas do dataframe atualizado 
head(airquality, n = 4)
  Ozone Solar.R Wind Temp Month Day TempCelsius
1    41     190  7.4   67     5   1    19.44444
2    36     118  8.0   72     5   2    22.22222
3    12     149 12.6   74     5   3    23.33333
4    18     313 11.5   62     5   4    16.66667
# Apagando coluna
airquality$TempCelsius <- NULL

head(airquality, n = 4)
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4

Exercícios #4

Usando o dataset mtcars:

  • Quantas colunas e qualtas linhas tem este dataset?
  • Exiba as primeiras 5 linhas.
  • Mostre um resumo estatístico.
  • Exiba as colunas mpg e hp.
  • Filtre o mtcars para mostrar apenas os carros com mpg maior que 25.
  • Mostre as linhas em que cyl é igual a 6 e hp maior que 110.
  • Mostre as linhas onde o mpg não é maior que 20.
  • Crie uma nova coluna chamada kmpl (quilômetros por litro = milhas por galão * 0.425).
  • Remova a coluna gear.

Usando o dataset iris:

  • Qual o tipo de cada uma das colunas do dataframe?
  • O que significa cada uma delas?
  • Liste os nomes das colunas.
  • Exiba as últimas 4 linhas do dataset.
  • Exiba a terceira linha inteira.
  • Exiba apenas as linhas com Sepal.Length maior que 7.
  • Mostre as linhas onde o Sepal.Width é maior que a média dessa coluna.

Leitura de dados

Acessando arquivos no computador

Um passo importante na tarefa de importação de dados para o R é saber onde está o arquivo que queremos importar. Toda função de importação vai exigir um caminho, ou seja, uma string que representa o endereço do arquivo no computador.

Há duas formas de passarmos o caminho de um arquivo: usar o caminho absoluto ou usar o caminho relativo.

# Exemplo de caminho absoluto
'C:/Users/bruna/Documents/Aulas/Dados/meus_dados.csv'

# Exemplo de caminho relativo
'Dados/meus_dados.csv'

Mas caminho relativo a quê?

Diretório de trabalho

O diretório de trabalho (working directory) nada mais é do que a pasta em que o R vai procurar arquivos na hora de ler informações ou gravar arquivos na hora de salvar objetos.

Se você não estiver trabalhando em um projeto R, ou não definiu uma pasta específica, (no Windows) provavelmente seu diretório de trabalho será a pasta “Documentos”.

Mas caso você não saiba qual o diretório de trabalho que o R está considerando, basta usar a função getwd().

getwd()

Trocando o diretório de trabalho

Caso você queria trocar seu diretório de trabalho, você pode usar a função setwd().

setwd('C:/Users/bruna/Documents/Aulas')

Tip

Note que as barras do caminho passado para a função estão inclinadas para a direita! Caso você copie o caminho do seu computador, você precisará inverter as barras ou duplicá-las.

# Assim também vai funcionar
setwd('C:\\Users\\bruna\\Documents\\Aulas')

Lendo arquivos .csv

Um arquivo CSV (Comma-Separated Values - valores separados por vírgula) é um formato simples e amplamente utilizado para armazenar dados em formato tabular.

No R, para ler estes dados, basta usar a função read.csv(), passando o caminho do arquivo.

students <- read.csv('Aulas/Dados/student_mat.csv')

Porém, nem sempre o separador do arquivo é uma vírgula. Nestes casos você pode usar o argumento sep, ou ainda, em casos de separação por ; (comumente usado no Brasil e Europa), a função read.csv2().

# Lendo usando a função read.csv2()
wine <- read.csv2('Aulas/Dados/winequality.csv')

# Lendo ajustando o separador
wine_2 <- read.csv('Aulas/Dados/winequality.csv', sep = ';')

Lendo arquivos de texto

O arquivo .csv é um arquivo de texto, com separador de colunas por vírgula. Mas os dados podem estar em arquivos .txt, ou ainda com outros separadores. Algumas funções úteis nesses casos são:

# Para arquivos .txt com colunas separadas por tabulação 
read.delim()

# Para qualquer formato de arquivo de texto, tendo que ajustar os parâmetros
read.table()

Os separadores mais comuns são:

  • Vírgula sep = ','
  • Ponto e vírgula sep = ';'
  • Tabulação sep = '\t'

E o arquivo excel?

Diferença entre .csv e .xlsx

.csv é um arquivo texto, simples, ideal para trocar dados entre sistemas e linguagens de programação.

.xls/.xlsx é o formato completo e formatado do Excel, com formatação visual, fórmulas, várias abas.

Warning

Evite ao máximo consumir dados de arquivos .xlsx. Inclusive prefira, quando possível, salvar apenas os dados necessários em formato .csv e, assim, ler os dados.

Lendo arquivos .xlsx

Para ler arquivos em .xlsx usaremos um pacote específico para isso: o readlxl.

# Instala o pacote na máquina
install.packages('readxl')

# Carrega o pacote na sessão R
library(readxl)

# Lê a planilha indicada pelo argumento 'sheet'
financial <- read_xlsx('Aulas/Dados/Financial Sample.xlsx', sheet = 2)

Lendo arquivos via IU

É possível ler arquivos no R via point-and-click.

Salvando arquivos

Muitas vezes, depois de tratarmos o dado, será necessário salvar este arquivo novamente. Para isso, podemos as seguintes funções:

# salvar em formato CSV
write.csv(dados, "arquivo.csv", row.names = FALSE)

# salvar CSV com separador ponto e vírgula
write.csv2(dados, "arquivo.csv", row.names = FALSE)
write.csv(dados, "arquivo.csv", row.names = FALSE, sep = ';')

# salvar arquivos de texto
write.table(dados, "arquivo.txt", sep = "\t", row.names = FALSE)

Salvar em .rds

Um .rds é um arquivo binário que armazena um objeto R. Ele mantém toda a estrutura do objeto, incluindo tipos de dados, fatores, atributos, classes etc.

É ideal para guardar dados tratados, limpos, ou resultados de análise/modelos, e depois reutilizar no próprio R.

# salva um objeto em formato binário RDS
saveRDS(dados, "dados.rds")

# Para ler depois
dados <- readRDS("dados.rds")

Tip

Este formato é muito útil quando estamos trabalhando em um projeto R! Caso o objeto salvo será usando apenas no R novamente, priorize este formato.

Exercícios #5

Para começar, baixe a base de dados top_songs_spotify.csv. Sua versão original Top Spotify Listening History Songs in Countries está disponível no Kaggle.

  1. Leia o arquivo utilizando as funções read.csv(), read.delim() e read.table(). Que argumentos foram necessários usar em cada uma delas?
  2. Leia agora o arquivo via point-and-click na interface. O que acontece?
  3. Tranforme a variável ms_played em caractere. Tranforme a variável platform em fator, usando a função as.factor().
  4. Salve o arquivo no formato .csv com o separador ;. Salve também no formato .rds.
  5. Leia o arquivo .csv novo usando a função read.csv2(). Leia o arquivo .rds. Qual a diferença entre os dois?

Principais referências

Wickham, H., & Grolemund, G. (2017). R for data science (Vol. 2). O’Reilly.

James, L., & Teetor, P. (2019). R Cookbook, 2nd Edition. O’Reilly.

https://livro.curso-r.com/