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, com excel local.


1. Importação de dados

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").


Exemplos ilustrativos (não executados)

# readxl::read_xlsx()
dados_excel <- readxl::read_xlsx(path = "dados/planilha.xlsx")

# readr::read_delim() para TSV
dados_tsv <- readr::read_delim(file = "dados/dados.tsv", delim = "\t")

# googlesheets4::read_sheet()
googlesheets4::gs4_deauth()
dados_gs <- googlesheets4::read_sheet(ss = "https://docs.google.com/spreadsheets/d/SEU_ID", sheet = 1)
---

1.2 readr::read_delim() – lê arquivos de texto (CSV, TSV)

# Garante pasta 'dados'
if (!dir.exists("dados")) dir.create("dados")

# Salva em CSV e reimporta
write_delim(dados, file = "dados/planilha.csv", delim = ",")
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 <dbl>, ...12 <dbl>

Argumentos:
- file: caminho do arquivo texto (ex.: "dados/planilha.csv").
- delim: separador de colunas — "," (CSV), ";" (CSV BR), "\\t" (TSV). —

1.3 Importação automática (Google Sheets → read_sheet(); fallback Excel → read_xlsx())

library(googlesheets4); gs4_deauth()
library(readxl)

# 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()
# ss: URL ou ID da planilha.
# sheet: nome ou índice da aba (opcional).
# range: intervalo (ex.: "A1:D200", opcional).

# Resumo dos argumentos
# path (read_xlsx): caminho do arquivo local .xlsx.
# file (read_delim): caminho do arquivo texto (CSV/TSV).
# delim (read_delim): separador de colunas (,, ;, "\t").
# ss (read_sheet): URL/ID da planilha no Google Sheets.
# drv <- googledrive::drive_get(as_id(ss_id))
# URL/ID fornecido (público)

ss <- "https://docs.google.com/spreadsheets/d/1I5BRKAlsRKUuu76_yunud6ZWSS_0bgAv"

# Tenta ler como Google Sheets (1ª aba)
dados <- tryCatch(
  read_sheet(ss, sheet = 1),
  error = function(e) NULL
)

# Fallback: se não der como Sheets, usa Excel local (ajuste o caminho se necessário)
if (is.null(dados)) {
  caminho_excel <- "/Users/gestaoinowatt/Documents/dev/Planejamento_Enxoval_Leo_2026_detalhado.xlsx"
  if (!file.exists(caminho_excel)) stop("Arquivo Excel local não encontrado: ", caminho_excel)
  dados <- read_xlsx(path = caminho_excel)
}

# 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 <dbl>, ...12 <dbl>

Argumentos importantes
- ss (read_sheet): URL/ID da planilha no Google Sheets.
- path (read_xlsx): caminho do arquivo .xlsx local. —-

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. "https://docs.google.com/spreadsheets/d/1I5BRKAlsRKUuu76_yunud6ZWSS_0bgAv"

2. Combinação de tabelas – rbind() e cbind()

# Amostras
amostra1 <- head(dados, 3)
amostra2 <- head(dados, 2)

# Empilhar linhas (mesmas colunas)
unidas_linhas <- rbind(amostra1, amostra2)

# Colar colunas (mesmo nº de linhas)
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 <dbl>, ...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
# rbind() — empilha linhas (mesmas colunas)
# cbind() — cola colunas (mesmo número de linhas)

rbind() exige mesmas colunas; cbind() exige mesmo número de linhas.


3. Estrutura e dimensões dos dados

ncol(dados); nrow(dados); dim(dados)
#> [1] 12
#> [1] 49
#> [1] 49 12
head(dados, 3); tail(dados, 2)
#> # 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 <dbl>, ...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 <dbl>, ...12 <dbl>
str(dados)
#> 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                  : num [1:49] NA NA NA NA 15 15 15 15 15 NA ...
#>  $ ...12                  : num [1:49] NA NA NA NA 0 0 0 0 0 0 ...
# ncol(empilhado)     # nº de colunas
# nrow(empilhado)     # nº de linhas
# dim(empilhado)      # (linhas, colunas)
# head(empilhado, 3)  # primeiras 3 linhas
# tail(empilhado, 2)  # últimas 2 linhas
# str(empilhado)      # estrutura: tipos de cada coluna

4. Seleção e subconjuntos

nomes <- names(dados); nomes
#>  [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"
# Por índice
linhas_1a3  <- dados[1:3, ]
colunas_1e2 <- dados[, 1:min(2, ncol(dados))]

# Por nome
col1 <- nomes[1]
sel_por_nome <- dados[, col1, drop = FALSE]

# Filtro numérico se existir alguma coluna numérica
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 <dbl>, ...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

class(dados[[1]]); Sys.Date()
#> [1] "character"
#> [1] "2025-10-28"
x <- 15
c(x > 10, x < 10, x == 15, x != 20, x >= 15, x <= 14)
#> [1]  TRUE FALSE  TRUE  TRUE  TRUE FALSE
valores <- c("A", "B")
valores %in% unlist(dados[1], use.names = FALSE)
#> [1] FALSE FALSE
c(!TRUE, !FALSE)
#> [1] FALSE  TRUE
class(dados)     # tipo do objeto/vetor
#> [1] "tbl_df"     "tbl"        "data.frame"
Sys.Date()      # data atual
#> [1] "2025-10-28"

7. Operadores compostos – E (&) e OU (|)

# Regra do E (&) — todas as condições verdadeiras
# Regra do OU (|) — pelo menos uma condição verdadeira


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 <dbl>, ...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 <dbl>, ...12 <dbl>