ATIVIDADE 04 – Importação e Manipulação de Dados no R (Karen Maciel)
Objetivo
Este relatório apresenta, de forma objetiva, os principais conceitos de importação e manipulação de dados no R, com exemplos práticos reais a partir de uma planilha no Google Drive/Sheets.
1. Importação de dados
1.3 googlesheets4::read_sheet() – leitura do Google
Drive/Sheets (automática)
# Descobre o tipo do arquivo no Drive e lê automaticamente:
# - Se for Google Sheets → read_sheet()
# - Se for Excel (.xlsx) no Drive → baixa e lê com readxl()
drv <- googledrive::drive_get(as_id(ss_id))
mime <- drv$drive_resource[[1]]$mimeType
if (grepl("google-apps.spreadsheet", mime)) {
abas <- googlesheets4::sheet_names(ss_id)
sheet_to_read <- if ("Base" %in% abas) "Base" else abas[1]
dados <- googlesheets4::read_sheet(ss = ss_id, sheet = sheet_to_read)
} else if (grepl("openxmlformats-officedocument.spreadsheetml.sheet", mime)) {
tmp <- tempfile(fileext = ".xlsx")
googledrive::drive_download(as_id(ss_id), path = tmp, overwrite = TRUE)
dados <- readxl::read_xlsx(path = tmp, sheet = 1)
} else {
stop(paste0("O arquivo no Drive não é Google Sheets nem Excel .xlsx. Tipo: ", mime))
}
# Conferência
head(dados)#> # A tibble: 6 × 12
#> Mês Estação Tamanho item Quantidade necessári…¹ Quantidade que já te…²
#> <chr> <chr> <chr> <chr> <dbl> <dbl>
#> 1 Jan Verão RN Bodi… 4 3
#> 2 Jan Verão RN Maca… 2 2
#> 3 Jan Verão RN Maca… 3 3
#> 4 jan Verao RN Conj… 1 1
#> 5 <NA> <NA> <NA> body… 3 3
#> 6 Jan – Fev… Verão P Bodi… 6 8
#> # ℹ abbreviated names: ¹`Quantidade necessária`, ²`Quantidade que já tenho`
#> # ℹ 6 more variables: `Quantidade faltante` <dbl>, ...8 <lgl>, ...9 <lgl>,
#> # ...10 <lgl>, ...11 <chr>, ...12 <dbl>
#> tibble [49 × 12] (S3: tbl_df/tbl/data.frame)
#> $ Mês : chr [1:49] "Jan" "Jan" "Jan" "jan" ...
#> $ Estação : chr [1:49] "Verão" "Verão" "Verão" "Verao" ...
#> $ Tamanho : chr [1:49] "RN" "RN" "RN" "RN" ...
#> $ item : chr [1:49] "Bodies manga curta" "Macacões curtos" "Macacões longos" "Conjunto cardiga e calça" ...
#> $ Quantidade necessária : num [1:49] 4 2 3 1 3 6 4 2 3 4 ...
#> $ Quantidade que já tenho: num [1:49] 3 2 3 1 3 8 4 2 5 6 ...
#> $ Quantidade faltante : num [1:49] 1 0 0 NA NA -2 0 0 -2 -2 ...
#> $ ...8 : logi [1:49] NA NA NA NA NA NA ...
#> $ ...9 : logi [1:49] NA NA NA NA NA NA ...
#> $ ...10 : logi [1:49] NA NA NA NA NA NA ...
#> $ ...11 : chr [1:49] NA NA NA NA ...
#> $ ...12 : num [1:49] NA NA NA NA 0 0 0 0 0 0 ...
Observação: O código acima lida com os dois casos mais comuns (Sheets nativo e Excel armazenado no Drive) sem exigir autenticação.
1.2 readr::read_delim() – lê arquivos de texto (CSV,
TSV)
# Salva os dados em CSV (garante pasta 'dados')
if (!dir.exists("dados")) dir.create("dados")
write_delim(dados, file = "dados/planilha.csv", delim = ",")
# Reimporta o CSV
dados_csv <- read_delim(file = "dados/planilha.csv", delim = ",")
head(dados_csv)#> # A tibble: 6 × 12
#> Mês Estação Tamanho item Quantidade necessári…¹ Quantidade que já te…²
#> <chr> <chr> <chr> <chr> <dbl> <dbl>
#> 1 Jan Verão RN Bodi… 4 3
#> 2 Jan Verão RN Maca… 2 2
#> 3 Jan Verão RN Maca… 3 3
#> 4 jan Verao RN Conj… 1 1
#> 5 <NA> <NA> <NA> body… 3 3
#> 6 Jan – Fev… Verão P Bodi… 6 8
#> # ℹ abbreviated names: ¹`Quantidade necessária`, ²`Quantidade que já tenho`
#> # ℹ 6 more variables: `Quantidade faltante` <dbl>, ...8 <lgl>, ...9 <lgl>,
#> # ...10 <lgl>, ...11 <chr>, ...12 <dbl>
Principais argumentos: file (caminho do
arquivo texto) e delim (separador: ",",
";", "\\t").
1.1 readxl::read_xlsx() – lê planilhas Excel
(.xlsx)
# Exemplo ilustrativo de leitura de Excel local:
# dados_excel <- read_xlsx(path = "dados/planilha.xlsx")
# head(dados_excel)Argumento path: Caminho do arquivo
Excel local (ex.: "dados/planilha.xlsx").
1.4 Resumo rápido dos argumentos path,
file, delim, ss
| Argumento | Usado em | Significado | Exemplo |
|---|---|---|---|
path |
read_xlsx() |
Caminho do arquivo local (Excel). | "dados/planilha.xlsx" |
file |
read_delim() |
Caminho do arquivo de texto (CSV/TSV). | "dados/clientes.csv" |
delim |
read_delim() |
Delimitador que separa colunas (,
; \\t). |
"," (CSV), ";" (BR), "\\t"
(TSV) |
ss |
read_sheet() |
ID/URL de planilha no Google Sheets (ou arquivo no Drive). | "https://docs.google.com/spreadsheets/d/1I5BRKAlsRKUuu76_yunud6ZWSS_0bgAv" |
2. Combinação de tabelas – rbind() e
cbind()
amostra1 <- head(dados, 3)
amostra2 <- head(dados, 2)
unidas_linhas <- rbind(amostra1, amostra2)
aux <- data.frame(flag = rep("A", nrow(unidas_linhas)))
unidas_colunas <- cbind(unidas_linhas, aux)
list(rbind_exemplo = unidas_linhas, cbind_exemplo = unidas_colunas)#> $rbind_exemplo
#> # A tibble: 5 × 12
#> Mês Estação Tamanho item Quantidade necessári…¹ Quantidade que já te…²
#> <chr> <chr> <chr> <chr> <dbl> <dbl>
#> 1 Jan Verão RN Bodies ma… 4 3
#> 2 Jan Verão RN Macacões … 2 2
#> 3 Jan Verão RN Macacões … 3 3
#> 4 Jan Verão RN Bodies ma… 4 3
#> 5 Jan Verão RN Macacões … 2 2
#> # ℹ abbreviated names: ¹`Quantidade necessária`, ²`Quantidade que já tenho`
#> # ℹ 6 more variables: `Quantidade faltante` <dbl>, ...8 <lgl>, ...9 <lgl>,
#> # ...10 <lgl>, ...11 <chr>, ...12 <dbl>
#>
#> $cbind_exemplo
#> Mês Estação Tamanho item Quantidade necessária
#> 1 Jan Verão RN Bodies manga curta 4
#> 2 Jan Verão RN Macacões curtos 2
#> 3 Jan Verão RN Macacões longos 3
#> 4 Jan Verão RN Bodies manga curta 4
#> 5 Jan Verão RN Macacões curtos 2
#> Quantidade que já tenho Quantidade faltante ...8 ...9 ...10 ...11 ...12 flag
#> 1 3 1 NA NA NA <NA> NA A
#> 2 2 0 NA NA NA <NA> NA A
#> 3 3 0 NA NA NA <NA> NA A
#> 4 3 1 NA NA NA <NA> NA A
#> 5 2 0 NA NA NA <NA> NA A
3. Estrutura e dimensões dos dados
#> [1] 12
#> [1] 49
#> [1] 49 12
#> # A tibble: 3 × 12
#> Mês Estação Tamanho item Quantidade necessári…¹ Quantidade que já te…²
#> <chr> <chr> <chr> <chr> <dbl> <dbl>
#> 1 Jan Verão RN Bodies ma… 4 3
#> 2 Jan Verão RN Macacões … 2 2
#> 3 Jan Verão RN Macacões … 3 3
#> # ℹ abbreviated names: ¹`Quantidade necessária`, ²`Quantidade que já tenho`
#> # ℹ 6 more variables: `Quantidade faltante` <dbl>, ...8 <lgl>, ...9 <lgl>,
#> # ...10 <lgl>, ...11 <chr>, ...12 <dbl>
#> # A tibble: 2 × 12
#> Mês Estação Tamanho item Quantidade necessári…¹ Quantidade que já te…²
#> <chr> <chr> <chr> <chr> <dbl> <dbl>
#> 1 <NA> <NA> <NA> Saco de d… 1 1
#> 2 <NA> <NA> <NA> Fraldas d… 6 6
#> # ℹ abbreviated names: ¹`Quantidade necessária`, ²`Quantidade que já tenho`
#> # ℹ 6 more variables: `Quantidade faltante` <dbl>, ...8 <lgl>, ...9 <lgl>,
#> # ...10 <lgl>, ...11 <chr>, ...12 <dbl>
#> tibble [49 × 12] (S3: tbl_df/tbl/data.frame)
#> $ Mês : chr [1:49] "Jan" "Jan" "Jan" "jan" ...
#> $ Estação : chr [1:49] "Verão" "Verão" "Verão" "Verao" ...
#> $ Tamanho : chr [1:49] "RN" "RN" "RN" "RN" ...
#> $ item : chr [1:49] "Bodies manga curta" "Macacões curtos" "Macacões longos" "Conjunto cardiga e calça" ...
#> $ Quantidade necessária : num [1:49] 4 2 3 1 3 6 4 2 3 4 ...
#> $ Quantidade que já tenho: num [1:49] 3 2 3 1 3 8 4 2 5 6 ...
#> $ Quantidade faltante : num [1:49] 1 0 0 NA NA -2 0 0 -2 -2 ...
#> $ ...8 : logi [1:49] NA NA NA NA NA NA ...
#> $ ...9 : logi [1:49] NA NA NA NA NA NA ...
#> $ ...10 : logi [1:49] NA NA NA NA NA NA ...
#> $ ...11 : chr [1:49] NA NA NA NA ...
#> $ ...12 : num [1:49] NA NA NA NA 0 0 0 0 0 0 ...
4. Seleção e subconjuntos
#> [1] "Mês" "Estação"
#> [3] "Tamanho" "item"
#> [5] "Quantidade necessária" "Quantidade que já tenho"
#> [7] "Quantidade faltante" "...8"
#> [9] "...9" "...10"
#> [11] "...11" "...12"
linhas_1a3 <- dados[1:3, ]
colunas_1e2 <- dados[, 1:min(2, ncol(dados))]
col1 <- nomes[1]
sel_por_nome <- dados[, col1, drop = FALSE]
num_cols <- names(Filter(is.numeric, dados))
if (length(num_cols) > 0) {
col_num <- num_cols[1]
med <- median(dados[[col_num]], na.rm = TRUE)
subset_num <- dados[dados[[col_num]] > med, ]
head(subset_num)
} else {
"Sem colunas numéricas para filtrar neste exemplo."
}#> # A tibble: 6 × 12
#> Mês Estação Tamanho item Quantidade necessári…¹ Quantidade que já te…²
#> <chr> <chr> <chr> <chr> <dbl> <dbl>
#> 1 Jan – Fev… Verão P Bodi… 6 8
#> 2 Abr – Mai… Final … M Bodi… 8 9
#> 3 Abr – Mai… Outono… G Bodi… 6 5
#> 4 Abr – Mai… Outono… G Calça 6 7
#> 5 Abr – Mai… Outono… G Bodi… 6 8
#> 6 Jul - Ago… Invern… GG Bodi… 6 7
#> # ℹ abbreviated names: ¹`Quantidade necessária`, ²`Quantidade que já tenho`
#> # ℹ 6 more variables: `Quantidade faltante` <dbl>, ...8 <lgl>, ...9 <lgl>,
#> # ...10 <lgl>, ...11 <chr>, ...12 <dbl>
5. Funções estatísticas básicas
num_cols <- names(Filter(is.numeric, dados))
if (length(num_cols) > 0) {
x <- dados[[ num_cols[1] ]]
c(
min = min(x, na.rm = TRUE),
max = max(x, na.rm = TRUE),
mean = mean(x, na.rm = TRUE),
sd = sd(x, na.rm = TRUE),
median = median(x, na.rm = TRUE),
round_mean = round(mean(x, na.rm = TRUE), 1)
)
} else {
"Sem colunas numéricas — cálculos não aplicáveis."
}#> min max mean sd median round_mean
#> 1.000000 8.000000 3.638298 1.660612 4.000000 3.600000
6. Comparações lógicas
#> [1] "character"
#> [1] "2025-10-28"
#> [1] TRUE FALSE TRUE TRUE TRUE FALSE
#> [1] FALSE FALSE
#> [1] FALSE TRUE
7. Operadores compostos – E (&) e OU
(|)
if (ncol(dados) >= 2) {
c1 <- dados[[1]]
cond1 <- if (is.numeric(c1)) c1 > stats::median(c1, na.rm = TRUE) else c1 == c1[1]
c2 <- dados[[2]]
cond2 <- if (is.numeric(c2)) c2 >= stats::median(c2, na.rm = TRUE) else c2 == c2[1]
subset_E <- dados[ cond1 & cond2, ]
subset_OU <- dados[ cond1 | cond2, ]
list(E = head(subset_E), OU = head(subset_OU))
} else {
"Menos de 2 colunas — não é possível combinar condições."
}#> $E
#> # A tibble: 6 × 12
#> Mês Estação Tamanho item Quantidade necessári…¹ Quantidade que já te…²
#> <chr> <chr> <chr> <chr> <dbl> <dbl>
#> 1 Jan Verão RN Bodies ma… 4 3
#> 2 Jan Verão RN Macacões … 2 2
#> 3 Jan Verão RN Macacões … 3 3
#> 4 <NA> <NA> <NA> <NA> NA NA
#> 5 <NA> <NA> <NA> <NA> NA NA
#> 6 <NA> <NA> <NA> <NA> NA NA
#> # ℹ abbreviated names: ¹`Quantidade necessária`, ²`Quantidade que já tenho`
#> # ℹ 6 more variables: `Quantidade faltante` <dbl>, ...8 <lgl>, ...9 <lgl>,
#> # ...10 <lgl>, ...11 <chr>, ...12 <dbl>
#>
#> $OU
#> # A tibble: 6 × 12
#> Mês Estação Tamanho item Quantidade necessári…¹ Quantidade que já te…²
#> <chr> <chr> <chr> <chr> <dbl> <dbl>
#> 1 Jan Verão RN Bodi… 4 3
#> 2 Jan Verão RN Maca… 2 2
#> 3 Jan Verão RN Maca… 3 3
#> 4 <NA> <NA> <NA> <NA> NA NA
#> 5 Jan – Fev… Verão P Bodi… 6 8
#> 6 Jan – Fev… Verão P Maca… 4 4
#> # ℹ abbreviated names: ¹`Quantidade necessária`, ²`Quantidade que já tenho`
#> # ℹ 6 more variables: `Quantidade faltante` <dbl>, ...8 <lgl>, ...9 <lgl>,
#> # ...10 <lgl>, ...11 <chr>, ...12 <dbl>