Introdução ao R: o básico

Treinamento em R

Bem-vindo ao “Curso de Introdução ao R”!

  • Vamos aprender a usar a linguagem de programação R!

  • Usando dados administrativos familiares às administrações tributárias.

Alguns pré-requisitos

❌ O treinamento não requer nenhum conhecimento prévio em programação estatística.

✅ É necessário um computador com R e RStudio instalados para completar os exercícios.

✅ Conexão à internet é necessária para baixar os materiais do treinamento.

O que é R?

R é uma linguagem de programação com poderosas capacidades estatísticas e gráficas.

Por que devemos usar R?

  1. R é muito flexível e poderoso—adaptável a quase qualquer tarefa, (limpeza de dados, visualização de dados, econometria, análise de dados espaciais, machine learning, web scraping, etc.)
  1. R é código aberto e gratuito - permitindo que você e sua instituição economizem dinheiro!
  1. R tem crescido rapidamente em popularidade.
  1. R oferece uma ótima interface - RStudio.

E quanto ao Excel?

✅ Fácil de usar.

❌ Só é bom para conjuntos de dados pequenos.

❌ Não mantemos registro do que fazemos.

❌ Não é simples para mesclar dados.

❌ E a lista continua…

E quanto ao STATA?

✅ Stata é amplamente usado em economia.

✅ Fácil de aprender.

❌ Só é bom para conjuntos de dados pequenos.

❌ Caro!

❌ Falta de flexibilidade… você também odeia keep, preserve e restore?

Começando com RStudio

Você deve ver isto!

Se não vê, certifique-se de que abriu o RStudio e não o R!

Console

Vamos começar escrevendo seus scripts R (código-fonte) no painel Source.

Você pode usar a barra de menu ou Ctrl + Shift + N para criar novos scripts R.

Scripts nos ajudam a documentar e organizar os passos que queremos realizar.

Para executar um comando, digite-o no painel Source e pressione Ctrl+Enter (Windows) para executá-lo no Console.

O resultado aparecerá no painel Console (painel inferior esquerdo).

O painel Environment exibe todos os objetos que você criou durante sua sessão.

Usando R como Calculadora

Operações Matemáticas Básicas

Uma soma simples:

99 + 1
[1] 100

Cálculos mais complexos:

99 + 1 * 2
[1] 101

Seguindo regras matemáticas (ordem das operações):

(99 + 1) * 2
[1] 200

Mais Operações Matemáticas

Subtração, multiplicação, divisão:

150 - 50
[1] 100
10 * 5
[1] 50
100 / 4
[1] 25

Potências e raízes quadradas:

2^3       # 2 elevado à potência de 3
[1] 8
sqrt(16)  # Raiz quadrada
[1] 4

Notação científica:

2 / 100000   # Número muito pequeno
[1] 2e-05
5e3          # 5000 em notação científica
[1] 5000

Armazenando Resultados: Objetos

Em vez de apenas calcular, podemos salvar resultados para uso posterior.

vat_amount = 50000

Agora podemos usar vat_amount em outros cálculos:

vat_amount * 1.10  # Adicionar 10% de multa
[1] 55000

Podemos criar múltiplos objetos:

base_vat = 50000
penalty_rate = 0.10
total_vat = base_vat * (1 + penalty_rate)
total_vat
[1] 55000

Regras de Nomenclatura para Objetos

  • Use letras minúsculas
  • Separe palavras com underscore (_) - isso é chamado snake_case
  • Torne os nomes descritivos mas não muito longos
  • Não use espaços ou caracteres especiais

Bons nomes:

vat_amount
firm_id
total_revenue_2024

Nomes ruins:

VatAmount        # Uso misto de maiúsculas e minúsculas
vat amount       # Tem espaço (causará erro!)
x1               # Não é descritivo
very_long_name_that_is_hard_to_type_and_read

Comentários: Explicando Seu Código

Use # para adicionar comentários - R irá ignorar tudo após #

# Este é um comentário - R ignora esta linha

# Calcular IVA com multa
base_vat = 50000        # Montante do IVA em moeda local
penalty = base_vat * 0.05  # Multa de 5% por atraso na declaração
total = base_vat + penalty
total
[1] 52500

Dica

Boa prática: Comente seu código para explicar POR QUE você está fazendo algo, não apenas O QUE você está fazendo.

Entendendo Funções

O que é uma Função?

Uma função é um pedaço de código reutilizável que executa uma tarefa específica.

Pense nas funções como ferramentas em uma caixa de ferramentas:

  • sum() - soma números
  • mean() - calcula a média
  • sqrt() - calcula a raiz quadrada
  • round() - arredonda números

Estrutura básica de uma função:

nome_funcao(argumento1, argumento2, ...)

Usando Funções: Exemplos

# Calcular a soma
sum(100, 200, 300)
[1] 600
# Calcular a média
mean(c(10, 20, 30, 40, 50))
[1] 30
# Arredondar um número
round(3.14159, digits = 2)
[1] 3.14

Nota

Argumentos são as entradas que você fornece para uma função. Algumas funções têm argumentos obrigatórios, outras têm argumentos opcionais com valores padrão.

Obtendo Ajuda com Funções

Não tem certeza de como uma função funciona? Use help() ou ?:

# Duas formas de obter ajuda
help(mean)
?mean

A documentação de ajuda mostrará:

  • O que a função faz
  • Que argumentos ela aceita
  • Exemplos de uso
  • Valores de retorno

Dica

Sempre consulte a documentação de ajuda quando estiver aprendendo uma nova função!

Funções Comuns para Análise Tributária

# Valores tributários de exemplo
tax_payments = c(50000, 75000, 90000, 45000, 82000)

# Estatísticas resumidas
sum(tax_payments)      # Receita total
[1] 342000
mean(tax_payments)     # Pagamento médio
[1] 68400
median(tax_payments)   # Pagamento mediano
[1] 75000
min(tax_payments)      # Menor pagamento
[1] 45000
max(tax_payments)      # Maior pagamento
[1] 90000
length(tax_payments)   # Número de empresas
[1] 5

Exercício Rápido: Funções

Experimente estes exercícios você mesmo:

# 1. Crie um vetor de 5 valores de IVA de sua escolha
meus_valores_iva = c(30000, 55000, 42000, 68000, 51000)

# 2. Calcule a receita total de IVA
sum(meus_valores_iva)

# 3. Calcule o pagamento médio de IVA
mean(meus_valores_iva)

# 4. Arredonde a média para o inteiro mais próximo
round(mean(meus_valores_iva))

Tipos de Dados

Três Tipos Principais de Dados

Em R, os dados vêm em diferentes tipos (ou classes):

1. Numérico - números (com ou sem decimais)

receita = 150000.50
numero_empresas = 250

2. Caractere - texto (sempre entre aspas)

nome_empresa = "ABC Corporation"
setor = "Manufatura"

3. Lógico - valores TRUE/FALSE (booleanos)

esta_conforme = TRUE
tem_multas = FALSE

Verificando Tipos de Dados

Use a função class() para verificar que tipo de dado você tem:

# Verificar tipo de dado
class(150000)
[1] "numeric"
class("ABC Corporation")
[1] "character"
class(TRUE)
[1] "logical"

Por que isso importa?

  • Você só pode fazer matemática com números
  • Operações de texto funcionam apenas em caracteres
  • Comparações lógicas retornam TRUE/FALSE

Conversão de Tipos

Às vezes você precisa converter entre tipos:

# Converter número para caractere
numero = 12345
id_como_texto = as.character(numero)
id_como_texto
[1] "12345"
# Converter texto para número (se possível)
texto = "100"
como_numero = as.numeric(texto)
como_numero * 2
[1] 200

Aviso

Tenha cuidado! Converter texto não numérico para número resultará em NA:

as.numeric("ABC")  # Retorna NA
[1] NA

Vetores: Trabalhando com Múltiplos Valores

O que é um Vetor?

Um vetor é uma sequência de valores do mesmo tipo.

Pense em um vetor como uma coluna em uma planilha:

  • Uma coluna de valores de IVA
  • Uma coluna de IDs de empresas
  • Uma coluna de datas

Criando vetores com c() (combine):

# Vetor de valores de IVA
iva = c(50000, 75000, 90000, 45000, 82000)
iva
[1] 50000 75000 90000 45000 82000
# Vetor de IDs de empresas
ids_empresas = c("FIRMA_001", "FIRMA_002", "FIRMA_003")
ids_empresas
[1] "FIRMA_001" "FIRMA_002" "FIRMA_003"

Operações Vetoriais: Matemática

A matemática funciona em vetores inteiros:

iva = c(50000, 75000, 90000, 45000, 82000)

# Adicionar 10% de multa a todos os valores
iva * 1.10
[1] 55000 82500 99000 49500 90200
# Subtrair 1000 de cada valor
iva - 1000
[1] 49000 74000 89000 44000 81000
# Operações entre vetores
custo_base = c(40000, 60000, 70000, 35000, 65000)
margem = iva - custo_base
margem
[1] 10000 15000 20000 10000 17000

Criando Sequências

Atalhos para criar vetores:

# Sequência de números usando ':'
anos = 2020:2025
anos
[1] 2020 2021 2022 2023 2024 2025
# Sequência com incrementos usando seq()
taxas = seq(from = 0.10, to = 0.20, by = 0.02)
taxas
[1] 0.10 0.12 0.14 0.16 0.18 0.20
# Valores repetidos usando rep()
categoria = rep("Pequeno", times = 5)
categoria
[1] "Pequeno" "Pequeno" "Pequeno" "Pequeno" "Pequeno"

Funções de Vetor Úteis

iva = c(50000, 75000, 90000, 45000, 82000)

# Quantos elementos?
length(iva)
[1] 5
# Estatísticas resumidas
sum(iva)      # Total
[1] 342000
mean(iva)     # Média
[1] 68400
median(iva)   # Mediana
[1] 75000
sd(iva)       # Desvio padrão
[1] 19882.15
min(iva)      # Mínimo
[1] 45000
max(iva)      # Máximo
[1] 90000

Indexação: Acessando Elementos Específicos

Use colchetes [ ] para acessar elementos específicos:

iva = c(50000, 75000, 90000, 45000, 82000)

# Obter o primeiro elemento
iva[1]
[1] 50000
# Obter o terceiro elemento
iva[3]
[1] 90000
# Obter múltiplos elementos
iva[c(1, 3, 5)]
[1] 50000 90000 82000
# Obter um intervalo
iva[2:4]
[1] 75000 90000 45000

Nota

Importante: A indexação em R começa em 1 (não em 0 como em algumas outras linguagens)!

Nomeando Elementos de Vetor

Você pode dar nomes aos elementos do vetor:

# Criar vetor nomeado
iva = c(
  "Empresa_A" = 50000,
  "Empresa_B" = 75000,
  "Empresa_C" = 90000
)
iva
Empresa_A Empresa_B Empresa_C 
    50000     75000     90000 
# Acessar por nome
iva["Empresa_B"]
Empresa_B 
    75000 

Combinando Vetores

# Combinar vetores
q1_iva = c(50000, 75000)
q2_iva = c(90000, 45000)
iva_semestre = c(q1_iva, q2_iva)
iva_semestre
[1] 50000 75000 90000 45000
# Adicionar novos elementos
todos_iva = c(iva_semestre, 82000, 95000)
todos_iva
[1] 50000 75000 90000 45000 82000 95000

Comparações e Lógica

Operadores de Comparação

Comparações retornam valores lógicos (TRUE ou FALSE):

# Igual a
100 == 100
[1] TRUE
# Não igual a
100 != 50
[1] TRUE
# Maior que / Menor que
100 > 50
[1] TRUE
100 < 200
[1] TRUE
# Maior ou igual / Menor ou igual
100 >= 100
[1] TRUE
100 <= 50
[1] FALSE

Comparações com Vetores

As comparações funcionam elemento por elemento:

iva = c(50000, 75000, 90000, 45000, 82000)

# Quais valores são maiores que 60000?
iva > 60000
[1] FALSE  TRUE  TRUE FALSE  TRUE
# Quais valores são exatamente 75000?
iva == 75000
[1] FALSE  TRUE FALSE FALSE FALSE

Operadores Lógicos

Combine múltiplas condições:

iva = c(50000, 75000, 90000, 45000, 82000)

# E (ambas as condições devem ser verdadeiras)
iva > 50000 & iva < 85000
[1] FALSE  TRUE FALSE FALSE  TRUE
# OU (pelo menos uma condição deve ser verdadeira)
iva < 50000 | iva > 85000
[1] FALSE FALSE  TRUE  TRUE FALSE
# NÃO (inverte a condição)
!(iva > 70000)
[1]  TRUE FALSE FALSE  TRUE FALSE

Filtragem com Lógica

Encontrar elementos que atendem a uma condição:

vat = c(50000, 75000, 90000, 45000, 82000)

# Quais empresas pagaram mais de 60.000?
vat > 60000
[1] FALSE  TRUE  TRUE FALSE  TRUE

Use vetores lógicos para filtrar:

# Obter apenas montantes acima de 60.000
high_vat = vat[vat > 60000]
high_vat
[1] 75000 90000 82000

Múltiplas condições:

# IVA entre 50.000 e 80.000
moderate_vat = vat[vat >= 50000 & vat <= 80000]
moderate_vat
[1] 50000 75000

Valores Ausentes (NA)

Entendendo Dados Ausentes

Nos dados reais de administração tributária, valores ausentes são comuns:

  • Empresas que ainda não declararam
  • Registros incompletos
  • Erros de entrada de dados

Em R, valores ausentes são representados como NA (Not Available)

# Algumas empresas ainda não declararam IVA
vat_declared = c(50000, 75000, NA, 90000, 45000, NA, 82000)
vat_declared
[1] 50000 75000    NA 90000 45000    NA 82000

O Problema com NA

Matemática com NA retorna NA!

# Tentar calcular a média
mean(vat_declared)
[1] NA

Aviso

Qualquer cálculo envolvendo NA retornará NA a menos que você o manipule explicitamente!

Manipulando NA: O Argumento na.rm

A maioria das funções estatísticas tem um argumento na.rm (remover NA):

# Calcular média, removendo valores NA
mean(vat_declared, na.rm = TRUE)
[1] 68400
# Outras funções funcionam da mesma forma
sum(vat_declared, na.rm = TRUE)
[1] 342000
max(vat_declared, na.rm = TRUE)
[1] 90000

Dica

Sempre verifique seus dados para valores ausentes e decida como lidar com eles!

Detectando Valores Ausentes

# Verificar quais valores estão ausentes
is.na(vat_declared)
[1] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
# Contar quantos estão ausentes
sum(is.na(vat_declared))
[1] 2
# Quais posições têm valores ausentes?
which(is.na(vat_declared))
[1] 3 6

Trabalhando com Casos Completos

# Obter apenas valores não ausentes
complete_vat = vat_declared[!is.na(vat_declared)]
complete_vat
[1] 50000 75000 90000 45000 82000

Exemplo prático: Taxa de conformidade

firm_ids = paste0("FIRM_", 1:7)

total_firms = length(vat_declared)
firms_filed = sum(!is.na(vat_declared))
compliance_rate = (firms_filed / total_firms) * 100

cat("Taxa de Conformidade:", round(compliance_rate, 1), "%\n")
Taxa de Conformidade: 71.4 %
# Quais empresas não declararam?
non_compliant = firm_ids[is.na(vat_declared)]
non_compliant
[1] "FIRM_3" "FIRM_6"

Exercício 1: Básicos de R

10:00

Parte 1: Objetos e Cálculos

  1. Crie um objeto base_amount com valor 125000
  2. Crie um objeto tax_rate com valor 0.15 (15%)
  3. Calcule o montante de imposto e armazene-o em tax_owed
  4. Adicione uma multa de 5% a tax_owed e armazene em total_payment

Parte 2: Usando Funções

  1. Arredonde total_payment para o inteiro mais próximo
  2. Calcule a raiz quadrada de base_amount
  3. Use a função abs() para obter o valor absoluto de -5000

Exercício 1: Soluções

# Parte 1: Objetos e Cálculos
base_amount = 125000
tax_rate = 0.15
tax_owed = base_amount * tax_rate
total_payment = tax_owed * 1.05

# Parte 2: Usando Funções
round(total_payment)
sqrt(base_amount)
abs(-5000)

Exercício 2: Básicos de R

10:00

Parte 1: Criando Vetores

  1. Crie firm_ids: “FIRM_001” até “FIRM_006” (use paste0() e 1:6)
  2. Crie vat_amounts: 50000, 75000, NA, 90000, 45000, NA
  3. Crie years: 2020 a 2025 usando :
  4. Crie standard_rate: repita 0.15 seis vezes usando rep()

Parte 2: Operações com Vetores

  1. Calcule a média do IVA (manipule NAs!)
  2. Calcule o total de IVA coletado
  3. Multiplique todos os vat_amounts por 1.05 para adicionar multa de 5%

Exercício 2: Básicos de R

Parte 3: Indexação

  1. Obtenha o montante de IVA para a 3ª empresa
  2. Obtenha montantes de IVA para as empresas 2, 4 e 5
  3. Encontre todos os montantes de IVA maiores que 60000

Parte 4: Dados Ausentes

  1. Quantas empresas não declararam IVA?
  2. Crie um vetor lógico mostrando quais empresas têm dados ausentes
  3. Quais IDs de empresas correspondem a dados de IVA ausentes?

Soluções: Exercício 2

# Parte 1: Criando Vetores
firm_ids = paste0("FIRM_", sprintf("%03d", 1:6))
vat_amounts = c(50000, 75000, NA, 90000, 45000, NA)
years = 2020:2025
standard_rate = rep(0.15, times = 6)

# Parte 2: Operações com Vetores
mean(vat_amounts, na.rm = TRUE)
sum(vat_amounts, na.rm = TRUE)
vat_amounts * 1.05

# Parte 3: Indexação
vat_amounts[3]
vat_amounts[c(2, 4, 5)]
vat_amounts[vat_amounts > 60000 & !is.na(vat_amounts)]

# Parte 4: Dados Ausentes
sum(is.na(vat_amounts))
is.na(vat_amounts)
firm_ids[is.na(vat_amounts)]

Estendendo R com Pacotes

O que são Pacotes?

Pacotes R são coleções de funções criadas pela comunidade.

Pense no R base como um smartphone, e pacotes como aplicativos que você instala!

Dois passos para usar um pacote:

  1. Instalar (uma vez): install.packages("nomeDoPacote")
  2. Carregar (cada sessão): library(nomeDoPacote)

Instalando e Carregando Pacotes

# Instalar um pacote (necessário apenas uma vez)
install.packages("ggplot2")

# Carregar o pacote (necessário cada vez que você inicia o R)
library(ggplot2)

# Agora você pode usar funções do ggplot2!

Nota

Pense nisso assim:

  • Instalar = Comprar um livro e colocá-lo na sua estante
  • Carregar = Tirar o livro da estante para lê-lo

Pacotes Populares para Análise Tributária

Alguns pacotes que você usará neste curso:

dplyr - Manipulação e transformação de dados

ggplot2 - Criação de visualizações profissionais

readr / readxl - Leitura de arquivos CSV e Excel

data.table - Operações rápidas em grandes conjuntos de dados

lubridate - Trabalhando com datas

Dica

Aprenderemos esses pacotes nos módulos seguintes!

Resumo

O que Aprendemos Hoje

  • Interface RStudio - onde escrever e executar código
  • R como calculadora - operações aritméticas básicas
  • Objetos - armazenando valores para uso posterior
  • Funções - ferramentas reutilizáveis que executam tarefas
  • Tipos de dados - numérico, caractere, lógico
  • Vetores - sequências de dados
  • Operações com vetores - aritmética e filtragem
  • Valores ausentes - manipulando dados incompletos com NA
  • Pacotes - estendendo as capacidades do R

Conceitos-Chave para Lembrar

Sempre salve seu trabalho em scripts - não apenas no console!

Funções são suas amigas - use help() quando não tiver certeza

Vetores estão em toda parte - eles são a base dos dados em R

Manipule NAs explicitamente - use na.rm = TRUE em cálculos

Comente seu código - seu eu futuro agradecerá!