Este documento apresenta os principais conceitos de importação e manipulação de dados no R. Em cada tópico há uma explicação e exemplos.
Pacotes usados: readxl, readr, googlesheets4 (para importação) e base R para manipulações.
Instalação (quando necessário):
No console install.packages(readxl) install.packages(readr) install.packages(googlesheets4)
Carregar pacotes:
library(readxl); library(readr); library(googlesheets4)
library(readxl)
## Warning: package 'readxl' was built under R version 4.3.3
library(readr)
## Warning: package 'readr' was built under R version 4.3.3
library(googlesheets4)
## Warning: package 'googlesheets4' was built under R version 4.3.3
Objetivo
Ler planilhas Excel modernas (.xlsx) diretamente em um data.frame.
Argumento-chave:
path (caminho completo ou URL do arquivo .xlsx).
Outros úteis: sheet (aba), range, col_types, skip.
library(readxl)
# Exemplo com caminho local:
# path = "dados/clientes.xlsx"
base_dados_dos_clientes_xlsx <- read_xlsx(path = "dados/clientes.xlsx", sheet = "Base")
# Exemplo com URL pública (quando disponível):
# df_xlsx <- read_xlsx(path = "https://exemplo.com/arquivo.xlsx")
Observações. - read_xlsx() usa path como nome do argumento para o arquivo. - Para .xls (antigo), use readxl::read_xls().
Objetivo. Ler arquivos de texto delimitados (CSV, TSV etc.) com alto desempenho.
Argumentos-chave: - file: caminho ou URL do arquivo. - delim: caractere delimitador (‘,’ para CSV, ‘;’ para CSV europeu, ’ para TSV). - locale, col_types, na, skip também são úteis.
library(readr)
# CSV padrão (vírgula como separador)
clientes_csv <- read_delim(file = "dados/clientes.csv", delim = ",")
# CSV com ponto e vírgula (comum em PT-BR/Excel)
clientes_csv2 <- read_delim(file = "dados/clientes_pv.csv", delim = ";")
# TSV (tab-separated values)
tabela_tsv <- read_delim(file = "dados/tabela.tsv", delim = "\t")
Observações. - Em readr, o argumento do arquivo costuma se chamar file. - Atalhos: readr::read_csv() (delim = “,”), readr::read_csv2() (delim = “;”), readr::read_tsv() (delim = “).
Objetivo Ler guias de uma planilha do Google direto para R.
Argumentos-chave: - ss: identificação da planilha (URL completa, ID ou gs4_id). - sheet: nome/índice da guia (aba) a importar.
library(googlesheets4)
# 1) Autentique (abre janela do Google):
gs4_auth() # ou gs4_auth(email = "seu_email@dominio.com")
# 2) Ler uma guia específica da planilha
# Use a URL completa da planilha no argumento `ss`:
dados_googlesheet <- read_sheet(ss = "https://docs.google.com/spreadsheets/d/PLANILHA_ID/edit#gid=0",
sheet = "Base")
Atenção.
Objetivo Empilhar linhas (rbind) ou colar colunas (cbind) de objetos tabulares compatíveis.
# Exemplo
a <- head(mtcars, 5)
b <- tail(mtcars, 5)
# Empilhar (mesmas colunas, mesma ordem e tipos)
empilhado <- rbind(a, b)
dim(empilhado)
## [1] 10 11
# Colar colunas (mesmo número de linhas)
x <- mtcars[1:10, 1:3]
y <- mtcars[1:10, 4:6]
colado <- cbind(x, y)
dim(colado)
## [1] 10 6
Boas práticas. - Para rbind() funcionar bem, garanta mesmos nomes e classes das colunas (ou reordene/renomeie antes). - Para cbind(), garanta o mesmo número de linhas e a mesma ordem dos registros.
Funções úteis para inspeção rápida:
dados <- iris
ncol(dados) # número de colunas
## [1] 5
nrow(dados) # número de linhas
## [1] 150
dim(dados) # (linhas, colunas)
## [1] 150 5
head(dados, 3) # primeiras linhas
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
tail(dados, 3) # últimas linhas
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 148 6.5 3.0 5.2 2.0 virginica
## 149 6.2 3.4 5.4 2.3 virginica
## 150 5.9 3.0 5.1 1.8 virginica
str(dados) # estrutura: tipos, exemplos, fatores, etc.
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
Índice básico: obj[linhas, colunas] (vazio =
tudo).
Aceita vetores numéricos, nomes de
colunas, lógicos e negativos.
teste <- mtcars
# Por POSIÇÃO (número da coluna/linha)
teste[1:3, 1:2] # 3 primeiras linhas, 2 primeiras colunas
## mpg cyl
## Mazda RX4 21.0 6
## Mazda RX4 Wag 21.0 6
## Datsun 710 22.8 4
teste[c(1,5,10), 4] # linhas específicas, 4ª coluna
## [1] 110 175 123
# Por NOME de coluna
teste[1:3, c("mpg","hp")]
## mpg hp
## Mazda RX4 21.0 110
## Mazda RX4 Wag 21.0 110
## Datsun 710 22.8 93
teste[, c("mpg","cyl")] # todas as linhas, colunas selecionadas
## mpg cyl
## Mazda RX4 21.0 6
## Mazda RX4 Wag 21.0 6
## Datsun 710 22.8 4
## Hornet 4 Drive 21.4 6
## Hornet Sportabout 18.7 8
## Valiant 18.1 6
## Duster 360 14.3 8
## Merc 240D 24.4 4
## Merc 230 22.8 4
## Merc 280 19.2 6
## Merc 280C 17.8 6
## Merc 450SE 16.4 8
## Merc 450SL 17.3 8
## Merc 450SLC 15.2 8
## Cadillac Fleetwood 10.4 8
## Lincoln Continental 10.4 8
## Chrysler Imperial 14.7 8
## Fiat 128 32.4 4
## Honda Civic 30.4 4
## Toyota Corolla 33.9 4
## Toyota Corona 21.5 4
## Dodge Challenger 15.5 8
## AMC Javelin 15.2 8
## Camaro Z28 13.3 8
## Pontiac Firebird 19.2 8
## Fiat X1-9 27.3 4
## Porsche 914-2 26.0 4
## Lotus Europa 30.4 4
## Ford Pantera L 15.8 8
## Ferrari Dino 19.7 6
## Maserati Bora 15.0 8
## Volvo 142E 21.4 4
# Exclusão por índice/nomes (usa negativo)
teste[ , -c(1,2)] # todas as colunas menos 1 e 2
## disp hp drat wt qsec vs am gear carb
## Mazda RX4 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 140.8 95 3.92 3.150 22.90 1 0 4 2
## Merc 280 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 400.0 175 3.08 3.845 17.05 0 0 3 2
## Fiat X1-9 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ford Pantera L 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 301.0 335 3.54 3.570 14.60 0 1 5 8
## Volvo 142E 121.0 109 4.11 2.780 18.60 1 1 4 2
teste[ , setdiff(names(teste), c("mpg","cyl"))]
## disp hp drat wt qsec vs am gear carb
## Mazda RX4 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 140.8 95 3.92 3.150 22.90 1 0 4 2
## Merc 280 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 400.0 175 3.08 3.845 17.05 0 0 3 2
## Fiat X1-9 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ford Pantera L 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 301.0 335 3.54 3.570 14.60 0 1 5 8
## Volvo 142E 121.0 109 4.11 2.780 18.60 1 1 4 2
# Filtro por condição (linhas lógicas)
teste[teste$mpg > 25, ] # somente carros com mpg > 25
## mpg cyl disp hp drat wt qsec vs am gear carb
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
subset(teste, mpg > 25 & cyl == 4) # alternativa legível
## mpg cyl disp hp drat wt qsec vs am gear carb
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
# Seleção por vetor lógico de colunas
cols_numericas <- sapply(teste, is.numeric)
teste[, cols_numericas]
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
x <- c(1, 2, 3, 4, 5, NA)
min(x, na.rm = TRUE) # menor valor
## [1] 1
max(x, na.rm = TRUE) # maior valor
## [1] 5
mean(x, na.rm = TRUE) # média
## [1] 3
sd(x, na.rm = TRUE) # desvio-padrão
## [1] 1.581139
median(x, na.rm = TRUE) # mediana
## [1] 3
round(pi, digits = 2) # arredondamento
## [1] 3.14
Em dados reais, vale a pena tratar valores faltantes com na.rm = TRUE nas funções.
Tipos/Classes e datas:
class(iris$Sepal.Length) # classe do objeto
## [1] "numeric"
hoje <- Sys.Date() # data do sistema
hoje
## [1] "2025-10-29"
# Comparações com datas
ontem <- hoje - 1
hoje > ontem # TRUE
## [1] TRUE
Operadores relacionais:
5 > 3 # maior que
## [1] TRUE
5 < 3 # menor que
## [1] FALSE
5 == 5 # igual
## [1] TRUE
5 != 4 # diferente
## [1] TRUE
5 >= 5 # maior ou igual
## [1] TRUE
3 <= 5 # menor ou igual
## [1] TRUE
teste <- mtcars
# E: carros com mpg > 25 **E** 4 cilindros
subset(teste, mpg > 25 & cyl == 4)[, c("mpg","cyl")]
## mpg cyl
## Fiat 128 32.4 4
## Honda Civic 30.4 4
## Toyota Corolla 33.9 4
## Fiat X1-9 27.3 4
## Porsche 914-2 26.0 4
## Lotus Europa 30.4 4
# OU: carros com 6 **OU** 8 cilindros
subset(teste, cyl == 6 | cyl == 8)[, c("cyl","mpg")]
## cyl mpg
## Mazda RX4 6 21.0
## Mazda RX4 Wag 6 21.0
## Hornet 4 Drive 6 21.4
## Hornet Sportabout 8 18.7
## Valiant 6 18.1
## Duster 360 8 14.3
## Merc 280 6 19.2
## Merc 280C 6 17.8
## Merc 450SE 8 16.4
## Merc 450SL 8 17.3
## Merc 450SLC 8 15.2
## Cadillac Fleetwood 8 10.4
## Lincoln Continental 8 10.4
## Chrysler Imperial 8 14.7
## Dodge Challenger 8 15.5
## AMC Javelin 8 15.2
## Camaro Z28 8 13.3
## Pontiac Firebird 8 19.2
## Ford Pantera L 8 15.8
## Ferrari Dino 6 19.7
## Maserati Bora 8 15.0
Observação: & e | operam elemento a
elemento em vetores.
Em expressões escalares, há também && e || (avaliam
apenas o primeiro elemento de cada lado).