6.4 Outros tipos de dados derivados
6.4.1 Fator
Em alguns casos variáveis do tipo caractere possuem uma ordem implícita. Este tipo de variável é geralmente chamada de categórica. Então qualquer variável que pode ser ordenada ou classificada em grupos pode ser representada como factor no
.
Podemos por exemplo classificar eventos de ocorrência de chuva por classe de intensidade:
intensidade <- factor(
x = c("baixa", "moderada", "alta")
)
intensidade
#> [1] baixa moderada alta
#> Levels: alta baixa moderadaNote que a impressão de um fator na tela é diferente da de um caractere. Ele é impresso sem as aspas e há uma segunda linha de informação sobre os níveis (levels) da variável intensidade. Um fator possui o atributo adicional: níveis. Os níveis de um fator são obtidos com a função levels():
levels(intensidade)
#> [1] "alta" "baixa" "moderada"Por padrão os níveis são definidos em ordem alfabética. Então "alta" recebeu o índice 1, "baixa" o índice 2 e moderada o índice 3. Estes índices são mostrados com a função str() ou convertendo um fator para numérico:
str(intensidade)
#> Factor w/ 3 levels "alta","baixa",..: 2 3 1
as.numeric(intensidade)
#> [1] 2 3 1A função str() é uma abreviação para structure e serve para nos fornecer um resumo da estrutura dos dados.
No caso das intensidade, seria melhor que os níveis fossem ordenados como: baixa < moderada < alta. Nós podemos especificar um fator ordenado ao
, especificando no argumento levels:
intensidade_o <- factor(
x = c("baixa", "moderada", "alta"),
levels = c("baixa", "moderada", "alta"),
ordered = TRUE
)
intensidade_o
#> [1] baixa moderada alta
#> Levels: baixa < moderada < altaFatores são úteis em alguns processos analíticos e gráficos. Para ilustrar um exemplo simples, suponha que o número de casos registrados em cada intensidade tenha sido:
n_casos <- c(90, 30, 5)Poderíamos representar graficamente estas informações. Veja abaixo a diferença na ordem do eixo x, ao usar o fator intensidade(ordem alfabética) e intensidade_o (ordenado):
library(ggplot2)
qplot(x = intensidade, y = n_casos, geom = "col")
qplot(x = intensidade_o, y = n_casos, geom = "col")
Para verificar se uma variável é um fator e se esse fator é ordenado usamos, respectivamente:
is.factor(intensidade)
#> [1] TRUE
is.ordered(intensidade)
#> [1] FALSEA coerção para fator é feita pela função as.factor:
(intensidade_no <- as.factor(
c("baixa", "moderada", "alta", "baixa", "baixa", "moderada")
))
#> [1] baixa moderada alta baixa baixa moderada
#> Levels: alta baixa moderada6.4.2 Datas e horários
Lidar com datas e horários pode ser difícil se não for usada uma estrutura de dados específica para isso. Entre as classes mais úteis para armazenar este tipo de informação, estão:
Date: para combinar datas (anos, meses e dias)POSIXct: para combinar datas e horas (horas, minutos e segundos)
Date armazena apenas datas, enquanto POSIXct armazena a datas associadas com horários. Ambos dados são representados como o número de dias (Date) ou de segundos (POSIXct) decorridos desde 1 de Janeiro de 1970.
Exemplos de cada um destes tipos de dados podem ser obtidos com o
usando as funções internas Sys.Date() e Sys.time() que informam a data e a hora atual:
Sys.Date()
#> [1] "2021-01-29"
Sys.time()
#> [1] "2021-01-29 21:35:47 UTC"As datas seguem o formato padrão de representação ISO-8601, ou seja o formato YYYY-MM-DD para ano-mês-dia, independente do local onde você mora.
Datas são criadas a partir da coerção de dados do tipo character para date:
amd <- as.Date("2012-06-28")
amd
#> [1] "2012-06-28"
class(amd)
#> [1] "Date"
# num. de dias de 1971
as.numeric(amd)
#> [1] 15519Datas com horários são criados a partir da coerção de dados do tipo character para POSIXct:
amd_hms <- as.POSIXct("2012-06-28 17:42")
amd_hms
#> [1] "2012-06-28 17:42:00 UTC"
class(amd_hms)
#> [1] "POSIXct" "POSIXt"
as.numeric(amd_hms)
#> [1] 1340905320A manipulação de dados da classe de datas com horários (POSIXct) torna-se mais versátil através do pacote lubridate, específico para manipulação de datas, o que será visto posteriormente.
O
requer que o formato de entrada dos dados sejam especificados usando a % e outros códigos que são descritos no manual de ajuda da função ?strptime. O formato padrão assumido pelo R para caracteres contendo datas com horas é %Y-%m-%d %H:%M:%S.
| código | Significado | Intervalo |
|---|---|---|
| %Y | ano (incluindo século) | 1 - 9999 |
| %m | mês | 01 - 12 |
| %d | dia | 01 - 31 |
| %H | hora | 00 - 23 |
| %M | minuto | 00 - 59 |
| %S | segundo | 00 - 59 |
Há vários outros códigos adicionais, por exemplo, para usar abreviações de meses como Jan (%b), e estes códigos são listados em ?strptime.
Para extrair informações de uma data, como por exemplo o ano, podemos usar a função format() passando o código de formato ao argumento format.
format(x = Sys.Date(), format = "%Y")
#> [1] "2021"O argumento format também pode ser especificado nas funções as.Date() e as.POSIXct(), assim provendo grande versatilidade para ler datas em diferentes formatos. No exemplo a seguir, vamos converter um caractere com as informações de data com horário armazenadas na ordem dia, mês, ano, hora, minuto e segundo, sem nenhum delimitador.
as.POSIXct(
x = "prec010120001942.grib",
tz = "UTC",
format = "prec%d%m%Y%H%M.grib"
)
#> [1] "2000-01-01 19:42:00 UTC"