<- read.csv2("./dados/dadosNeonatos.csv") neonatos
5 Manipulando os dados no RStudio
5.1 Importando dados de outros softwares
É possível inserir dados diretamente no R Script, como mostrado na Seção 4.11. Entretanto, se o conjunto de dados for muito extenso, torna-se complicado. Desta forma, é melhor importar os dados de outro software, como o Excel, SPSS, etc. A recomendação é que se construa o banco de dados, por exemplo, no Excel, e, depois, exporte o arquivo em um formato que o R reconheça – .xlsx
, .csv
, .sav
.
5.1.1 Importando dados de um arquivo CSV
O formato CSV significa Comma Separated Values, ou seja, é um arquivo de valores separados por vírgula. Esse formato de armazenamento é simples e agrupa informações de arquivos de texto em planilhas. É possível gerar um arquivo .csv
, a partir de uma planilha do Excel, usando o menu salvar como
e escolher CSV
.
As funções read.csv()
e read.csv2()
, incluídas no R base, podem ser utilizadas para importar arquivos CSV. Existe uma pequena diferença entre elas. Dois argumentos dessas funções têm padrão diferentes em cada uma. São eles: sep
(separador de colunas) e dec
(separador de decimais). Na read.csv()
, o padrão é sep = ”,”
e dec = ”.”
e em read.csv2()
o padrão é sep = “;”
e dec = ”,”
. Portanto, quando se importa um arquivo .csv
, é importante saber qual a sua estrutura. Verificar se os decimais estão separados por ponto ou por vírgula e se as colunas (variáveis), por vírgula ou ponto e vírgula. Para ver isso, basta abrir o arquivo em um bloco de notas (por exemplo, Bloco de Notas do Windows, Notepad ++).
Quando se usa o read.csv()
há necessidade de informar o separador e o decimal, pois senão ele usará o padrão inglês e o arquivo não será lido. Já com read.csv2()
, que usa o padrão brasileiro, não há necessidade de informar ao R qual o separador de colunas e nem o separador dos decimais.
Além disso, é necessário saber em que diretório do computador está o arquivo para informar ao comando. Recomenda-se colocar o arquivo na pasta do diretório de trabalho, pois assim basta apenas colocar o nome do arquivo na função de leitura dos dados. Caso contrário, tem-se que se usar todo o caminho (path).
Como exemplo, será importado o arquivo dadosNeonatos.csv
que se encontra no diretório de trabalho do autor, salvo anteriormente. Para obter o arquivo, clique aqui e salve em seu diretório de trabalho.
A estrutura deste arquivo mostra que as colunas estão separadas por ponto-e-virgula e, portanto, a leitura dos dados será feita com a função read.csv2()
e, como o arquivo está no diretório de trabalho, não há necessidade de informar o diretório completo. Os dados serão colocados em um objeto de nome neonatos
1:
Use a função str()
para visualizar o conjunto de dados:2
str(neonatos)
'data.frame': 15 obs. of 7 variables:
$ id : int 1 2 3 4 5 6 7 8 9 10 ...
$ pesoRN : int 3340 3345 3750 3650 3220 4070 3380 3970 3060 3180 ...
$ compRN : int 50 48 52 48 50 51 50 51 47 47 ...
$ sexo : chr "F" "F" "F" "M" ...
$ tipoParto: chr "normal" "normal" "cesareo" "normal" ...
$ idadeMae : int 40 19 26 19 32 24 27 20 21 19 ...
$ utiNeo : chr "não" "não" "não" "não" ...
Recentemente, foi desenvolvido o pacote readr
, incluído no conjunto de pacotes tidyverse
(1), para lidar rapidamente com a leitura de grandes arquivos. O pacote fornece substituições para funções como read.csv()
. As funções read_csv()
e read_csv2()
oferecidas pelo readr
são análogas às do R base. Entretanto, são muito mais rápidas e fornecem mais recursos, como um método compacto para especificar tipos de coluna. Além disso, produzem tibbles
(ver adiante, Seção 5.2) que são mais reproduzíveis, pois as funções básicas do R herdam alguns comportamentos do sistema operacional e das variáveis de ambiente, portanto, o código de importação que funciona no seu computador pode não funcionar no de outra pessoa. Para usar a função é necessário instalar e ativar o pacote readr
. A função read_csv2()
será utilizada para criar um outro objeto de nome recemNascidos
, mas o conjunto de dados a ser ativado é o mesmo (dadosNeonatos
):
library(readr)
<- read_csv2("dados/dadosNeonatos.csv") recemNascidos
ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
Rows: 15 Columns: 7
── Column specification ────────────────────────────────────────────────────────
Delimiter: ";"
chr (3): sexo, tipoParto, utiNeo
dbl (4): id, pesoRN, compRN, idadeMae
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Quando você executa read_csv2()
, ele imprime uma especificação de coluna que fornece o nome e o tipo de cada coluna.
Novamente, a função str()
mostrará a estrutura do arquivo 3:
str(recemNascidos)
spc_tbl_ [15 × 7] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
$ id : num [1:15] 1 2 3 4 5 6 7 8 9 10 ...
$ pesoRN : num [1:15] 3340 3345 3750 3650 3220 ...
$ compRN : num [1:15] 50 48 52 48 50 51 50 51 47 47 ...
$ sexo : chr [1:15] "F" "F" "F" "M" ...
$ tipoParto: chr [1:15] "normal" "normal" "cesareo" "normal" ...
$ idadeMae : num [1:15] 40 19 26 19 32 24 27 20 21 19 ...
$ utiNeo : chr [1:15] "não" "não" "não" "não" ...
- attr(*, "spec")=
.. cols(
.. id = col_double(),
.. pesoRN = col_double(),
.. compRN = col_double(),
.. sexo = col_character(),
.. tipoParto = col_character(),
.. idadeMae = col_double(),
.. utiNeo = col_character()
.. )
- attr(*, "problems")=<externalptr>
5.1.2 Importando um arquivo do Excel
O pacote readxl
, pertencente ao conjunto de pacotes do tidyverse
, facilita a obtenção de dados do Excel para o R, através da função read_excel()
. esta função tem o argumento sheet =
, que deve ser usado indicando o número ou o nome da planilha, colocado entre aspas. Este argumento é importante se houver mais de uma planilha, caso contrário, ele é opcional. Para saber os outros argumentos da função, colque o cursor dentro da função e aperte a tecla Tab
(Figura 5.1). Isto abrirá um menu com os argumentos:

Será feita a leitura dos mesmos dados, usados na leitura de dados csv
, apenas o arquivo agora está no formato .xlsx
. Para obter o arquivo, siga os mesmos passos, usados anteriormente. Clique aqui e salve em seu diretório de trabalho.
Os dados serão atribuídos a um objeto com outro nome (recemNatos
):
<- readxl::read_excel("dados/dadosNeonatos.xlsx")
recemNatos str(recemNatos)
tibble [15 × 7] (S3: tbl_df/tbl/data.frame)
$ id : num [1:15] 1 2 3 4 5 6 7 8 9 10 ...
$ pesoRN : num [1:15] 3340 3345 3750 3650 3220 ...
$ compRN : num [1:15] 50 48 52 48 50 51 50 51 47 47 ...
$ sexo : chr [1:15] "F" "F" "F" "M" ...
$ tipoParto: chr [1:15] "normal" "normal" "cesareo" "normal" ...
$ idadeMae : num [1:15] 40 19 26 19 32 24 27 20 21 19 ...
$ utiNeo : chr [1:15] "não" "não" "não" "não" ...
Na Figura 5.1, o duplo dois pontos (::
) precedido do nome do pacote, no caso readxl
, especifica a procedência da função usada. Nesta situação, não há necessidade de usar a função library()
para carregar o pacote já instalado em um diretório (biblioteca) previamente.
5.1.3 Importando arquivos com o RStudio
O RStudio
permite importar arquivos sem a necessidade de digitar comandos, que, para alguns podem ser tediosos.
Na tela inicial do RStudio
, à direita, na parte superior, clique na aba Environment e em Import Dataset
. Esta ação abre um menu que permite importar arquivos .csv, Excel, SPSS, etc.
Por exemplo, para importar o arquivo dadosNeonatos.xlsx
, clicar em From Excel...
Abre uma janela com uma caixa de diálogo. Clicar no botão Browse...
, localizado em cima à direita, para buscar o arquivo dadosNeonatos.xlsx
. Assim que o arquivo for aberto, ele mostra uma preview do arquivo e, em baixo, à direita mostra uma preview do código (Figura 5.2)), igual ao digitado anteriormente, que cria um objeto denominado dadosNeonatos
, nome do objeto escolhido pelo R, mas pode ser modificado na janela, à esquerda, Import Option
em Name
, onde pode-se digitar qualquer nome. Após encerrar as escolhas, clicar em Import
. É um caminho diferente para fazer o mesmo. Este é um dos fascínios do R!

5.2 Tibble
A maneira mais comum de armazenar dados no R é usar data.frames
ou tibble
.
Tibble é um novo tipo de dataframe. É como se fosse um dataframe mais moderno. Ele mantém muitos recursos importantes do data frame original, mas remove muitos dos recursos desatualizados.
Os tibbles
são outro recurso incrível adicionado ao R por Hadley Wickham, através do tidyverse
, conjunto de pacotes que formam um conjunto básico de funções que facilitam a manipulação e representação gráfica dos dados (1). Para saber mais sobre tibble
, veja vignette(‘tibbles’), em `help´.
A maioria dos pacotes do R usa dataframes tradicionais, entretanto é possível transformá-los para tibble
, usando a função as_tibble()
, incluída no pacote tidyr
(2). O único propósito deste pacote é simplificar o processo de criação de tidy data
(dados organizados).
O conceito de tidy data, introduzido por Wickman (3), se refere à estrutura dos dados organizados de maneira que cada linha é uma observação, cada coluna representa variáveis e cada entrada nas células do dataframe são os valores. A transformação de um dataframe tradicional em um tibble
, é um procedimento rescomendável, em função da maior flexibilidade destes.
Como exemplo deste procedimento, será usado o famoso conjunto de dados da flor iris (4) que fornece as medidas em centímetros das variáveis comprimento e largura da sepala e comprimento e largura da pétala, repectivamente, para 50 flores de cada uma das 3 espécies de íris (Iris setosa, versicolor e virginica). Este conjunto de dados encontra-se no pacote datasets
no R base. Para visualizar os dados, será usado a função str()
, também do R base, que mostra a estrutura interna de um objeto:
str(iris)
'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 ...
Observa-se que é um conjunto de dados da classe data.frame
, contendo 150 observações de 5 variáveis (colunas). Fazendo a coerção para um tibble
, tem-se:
library(tidyr)
as_tibble(iris)
# A tibble: 150 × 5
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
<dbl> <dbl> <dbl> <dbl> <fct>
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
10 4.9 3.1 1.5 0.1 setosa
# ℹ 140 more rows
Verifica-se que não houve grandes mudanças, apenas o conjunto de dados está estruturalmente mais organizado, mais flexível.
5.3 Pacote dplyr
O pacote dpylr
é comumente usado para limpar e trabalhar com dados (5). No nível mais básico, as funções do pacote referem-se a “verbos” de manipulação de dados, como select
, filter
, mutate
, arrange
, summarize
, entre outros, que permitem encadear várias etapas em algumas linhas de código, como será visto adiante.
O pacote dplyr
é adequado para trabalhar com um único conjunto de dados, bem como para obter resultados complexos em grandes conjuntos de dados. As funções dplyr
são processadas mais rápido do que as funções R base.
Para trabalhar na manipulação dos dados serão usados alguns pacotes, já mencionados anteriormente, readxl
e dplyr
, e o conjunto de dados dadosMater.xlsx
. Para obter estes dados, clique aqui e faça o download para o seu diretório de trabalho, como orientado anteriormente.
library(readxl)
library(dplyr)
Anexando pacote: 'dplyr'
Os seguintes objetos são mascarados por 'package:stats':
filter, lag
Os seguintes objetos são mascarados por 'package:base':
intersect, setdiff, setequal, union
<- read_excel("dados/dadosMater.xlsx") mater
A função read_excel()
carrega o arquivo e o atribui a um objeto , arbitrariamente, denominado de mater
4.
as_tibble(mater)
# A tibble: 1,368 × 30
id idadeMae altura peso ganhoPeso anosEst cor eCivil renda fumo
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 42 1.65 69.9 3.9 3 2 1 1.45 2
2 2 29 1.66 78 16.5 11 1 2 2.41 2
3 3 19 1.72 81 5 9 2 1 1.93 2
4 4 31 1.55 74 43 5 2 2 1.45 2
5 5 34 1.6 60 15 7 2 2 0.48 2
6 6 29 1.5 60 11.4 8 2 2 0.96 1
7 7 30 1.54 75.5 10.5 4 1 2 1.2 1
8 8 34 1.63 61 9 6 1 2 2.41 2
9 9 17 1.68 57 15 10 1 2 2.17 2
10 10 32 1.5 70 11.4 1 2 2 0.72 2
# ℹ 1,358 more rows
# ℹ 20 more variables: quantFumo <dbl>, prenatal <dbl>, para <dbl>,
# droga <dbl>, ig <dbl>, tipoParto <dbl>, pesoPla <dbl>, sexo <dbl>,
# pesoRN <dbl>, compRN <dbl>, pcRN <dbl>, apgar1 <dbl>, apgar5 <dbl>,
# utiNeo <dbl>, obito <dbl>, hiv <dbl>, sifilis <dbl>, rubeola <dbl>,
# toxo <dbl>, infCong <dbl>
Por padrão, a função retorna as dez primeiras linhas. Além disso, colunas que não couberem na largura da tela serão omitidas. Também são apresentadas a dimensão da tabela e as classes de cada coluna. Observa-se que ele tem 1368 linhas (observações) e 30 colunas (variáveis). Além disso, verifica-se que todas as variáveis estão como numéricas (dbl
) e, certamente, algumas, dependendo do objetivo na análise, precisarão ser transformadas.
O significado de cada uma das variáveis do arquivo dadosMater.xlsx
5 é mostrado abaixo.
- id \(\to\) identificação do participante
- idadeMae \(\to\) idade da parturiente em anos
- altura \(\to\) altura da parturiente em metros
- peso \(\to\) peso da parturiente em kg
- ganhoPeso \(\to\) aumento de peso durante a gestação
- anosEst \(\to\) anos de estudo completos
- cor \(\to\) cor declarada pela parturiente: 1 = branca; 2 = não branca
- eCivil \(\to\) estado civil: 1 = solteira; 2 = casada ou companheira
- renda \(\to\) renda familiar em salários minimos
- fumo \(\to\) tabagismo: 1 = sim; 2 = não
- quantFumo \(\to\) quantidade de cigarros fumados diariamente
- prenatal \(\to\) realizou pelo menos 6 consultas no pré-natal? 1 = sim; 2 = não
- para \(\to\) número de filhos paridos
- droga \(\to\) drogadição? 1 = sim; 2 = não
- ig \(\to\) idade gestacional em semanas
- tipoParto \(\to\) tipo de parto: 1 = normal; 2 = cesareana
- pesoPla \(\to\) peso da placenta em gramas
- sexo \(\to\) sexo do recém-nascido (RN): 1 = masc; 2 = fem
- pesoRN \(\to\) peso do RN em gramas
- compRN \(\to\) comprimento do RN em cm
- pcRN \(\to\) perímetro cefálico dorecém-nascido em cm
- apgar1 \(\to\) escore de Apgar no primeiro minuto
- apgar5 \(\to\) escore de Apgar no quinto minuto
- utiNeo \(\to\) RN necessitou de terapia intesiva? 1 = sim; 2 = não
- obito \(\to\) obito no período neonatal? 1 = sim; 2 = não
- hiv \(\to\) parturiente portadora de HIV? 1 = sim; 2 = não
- sifilis \(\to\) parturiente portadora de sífilis? 1 = sim; 2 = não
- rubeola \(\to\) parturiente portadora de rubéola? 1 = sim; 2 = não
- toxo \(\longrightarrow\) parturiente portadora de toxoplasmose? 1 = sim; 2 = não
- infCong \(\to\) parturiente portadora de alguma infecção congênita? 1 = sim; 2 = não
5.3.1 Função select()
A função select ()
é usada para escolher quais colunas (variáveis) entrarão na análise. Ela recebe os nomes das colunas como argumentos e cria um novo banco de dados usando as colunas selecionadas. A função select ()
pode ser combinada com outras funções, como filter ()
.
Por exemplo, um novo banco de dados será criado (mater1
), contendo as mesmas 1368 linhas, mas apenas com as variáveis idadeMae
, altura
, peso
, anosEst
, renda
, ig
, fumo
, pesoRN
, sexo
. Consulte a ajuda (?select()
) para obter maiores informações em relação aos argumentos da função:
<- select(mater, idadeMae, altura, peso, anosEst, renda, ig, tipoParto, fumo, pesoRN, sexo) mater1
Para visualizar este novo banco de dados, pode-se usar a função str()
:
str(mater1)
tibble [1,368 × 10] (S3: tbl_df/tbl/data.frame)
$ idadeMae : num [1:1368] 42 29 19 31 34 29 30 34 17 32 ...
$ altura : num [1:1368] 1.65 1.66 1.72 1.55 1.6 1.5 1.54 1.63 1.68 1.5 ...
$ peso : num [1:1368] 69.9 78 81 74 60 60 75.5 61 57 70 ...
$ anosEst : num [1:1368] 3 11 9 5 7 8 4 6 10 1 ...
$ renda : num [1:1368] 1.45 2.41 1.93 1.45 0.48 0.96 1.2 2.41 2.17 0.72 ...
$ ig : num [1:1368] 29 33 33 33 33 33 33 33 34 34 ...
$ tipoParto: num [1:1368] 2 2 1 1 2 1 2 1 1 2 ...
$ fumo : num [1:1368] 2 2 2 2 2 1 1 2 2 2 ...
$ pesoRN : num [1:1368] 1035 2300 1580 1840 2475 ...
$ sexo : num [1:1368] 2 2 2 2 2 2 2 2 2 2 ...
Como mostrado anteriormente, muitas variáveis numéricas do mater
, na realidade, são fatores e necessitam de modificação. Entretanto, das selecionadas, para constituir o novo banco de dados, apenas tipoParto
, fumo
e sexo
necessitam serem transformadas para fator:
$tipoParto <- factor(mater1$tipoParto,
mater1levels = c(1,2),
labels = c("normal","cesareo"))
$fumo <- factor (mater1$fumo,
mater1levels = c(1,2),
labels = c('sim','não'))
$sexo <- factor (mater1$sexo,
mater1levels = c(1,2),
labels = c("masc","fem"))
Usando, de novo, a função str()
, é possível observar a transformação:
str(mater1)
tibble [1,368 × 10] (S3: tbl_df/tbl/data.frame)
$ idadeMae : num [1:1368] 42 29 19 31 34 29 30 34 17 32 ...
$ altura : num [1:1368] 1.65 1.66 1.72 1.55 1.6 1.5 1.54 1.63 1.68 1.5 ...
$ peso : num [1:1368] 69.9 78 81 74 60 60 75.5 61 57 70 ...
$ anosEst : num [1:1368] 3 11 9 5 7 8 4 6 10 1 ...
$ renda : num [1:1368] 1.45 2.41 1.93 1.45 0.48 0.96 1.2 2.41 2.17 0.72 ...
$ ig : num [1:1368] 29 33 33 33 33 33 33 33 34 34 ...
$ tipoParto: Factor w/ 2 levels "normal","cesareo": 2 2 1 1 2 1 2 1 1 2 ...
$ fumo : Factor w/ 2 levels "sim","não": 2 2 2 2 2 1 1 2 2 2 ...
$ pesoRN : num [1:1368] 1035 2300 1580 1840 2475 ...
$ sexo : Factor w/ 2 levels "masc","fem": 2 2 2 2 2 2 2 2 2 2 ...
Se houver necessidade de se excluir alguma variável (coluna), basta colocar o sinal de subtração (-) antes do nome da variável:
<- select(mater1, -altura) mater2
str(mater2)
tibble [1,368 × 9] (S3: tbl_df/tbl/data.frame)
$ idadeMae : num [1:1368] 42 29 19 31 34 29 30 34 17 32 ...
$ peso : num [1:1368] 69.9 78 81 74 60 60 75.5 61 57 70 ...
$ anosEst : num [1:1368] 3 11 9 5 7 8 4 6 10 1 ...
$ renda : num [1:1368] 1.45 2.41 1.93 1.45 0.48 0.96 1.2 2.41 2.17 0.72 ...
$ ig : num [1:1368] 29 33 33 33 33 33 33 33 34 34 ...
$ tipoParto: Factor w/ 2 levels "normal","cesareo": 2 2 1 1 2 1 2 1 1 2 ...
$ fumo : Factor w/ 2 levels "sim","não": 2 2 2 2 2 1 1 2 2 2 ...
$ pesoRN : num [1:1368] 1035 2300 1580 1840 2475 ...
$ sexo : Factor w/ 2 levels "masc","fem": 2 2 2 2 2 2 2 2 2 2 ...
5.3.2 Função filter()
A função filter()
é usada para criar um subconjunto de dados que obedeçam determinadas condições lógicas: & (e), | (ou) e ! (não). Por exemplo:
- y & !x \(\to\) seleciona y e não x
- x & !y \(\to\) seleciona x e não y
- x | !x \(\to\) seleciona x ou y
- x & !x \(\to\) seleciona x e y
Um recém-nascido é dito a termo quando a duração da gestação é igual a 37 a 42 semanas incompletas. Se quisermos extrair do banco de dados mater1
os recém-nascidos a termo (mater3
), pode-se usar a função filter()
:
<- filter (mater1, ig>=37 & ig<42) mater3
Para exibir o resultado, execute a função str()
:
str(mater3)
tibble [1,085 × 10] (S3: tbl_df/tbl/data.frame)
$ idadeMae : num [1:1085] 28 31 27 28 18 28 22 28 25 14 ...
$ altura : num [1:1085] 1.5 1.55 1.6 1.58 1.76 1.63 1.54 1.55 1.56 1.51 ...
$ peso : num [1:1085] 48.5 65 60 47 65.5 72 65 74 70 56.7 ...
$ anosEst : num [1:1085] 6 5 8 8 7 11 6 5 9 6 ...
$ renda : num [1:1085] 3.13 0.72 2.41 1.69 1.93 1.92 2.65 2.53 0.48 1.92 ...
$ ig : num [1:1085] 37 37 37 38 39 39 39 39 39 39 ...
$ tipoParto: Factor w/ 2 levels "normal","cesareo": 1 2 2 1 1 2 2 1 1 1 ...
$ fumo : Factor w/ 2 levels "sim","não": 2 2 1 2 1 1 2 2 2 2 ...
$ pesoRN : num [1:1085] 3285 3100 3100 2800 3270 ...
$ sexo : Factor w/ 2 levels "masc","fem": 1 1 1 1 1 1 1 1 1 1 ...
Observe que, agora, o conjunto de dados mater3
tem 1085 linhas, número de recém-nascidos a termo do banco de dados original mater
(1368). Logo, os recém nascidos a termo correspondem a 79.3% dos nascimentos, nesta maternidade.
Outro exemplo
Para selecionar apenas os meninos, nascidos a termo, codificados como "masc"
, procede-se da seguinte maneira6:
<- filter (mater3, sexo == 'masc') meninos
str(meninos)
tibble [592 × 10] (S3: tbl_df/tbl/data.frame)
$ idadeMae : num [1:592] 28 31 27 28 18 28 22 28 25 14 ...
$ altura : num [1:592] 1.5 1.55 1.6 1.58 1.76 1.63 1.54 1.55 1.56 1.51 ...
$ peso : num [1:592] 48.5 65 60 47 65.5 72 65 74 70 56.7 ...
$ anosEst : num [1:592] 6 5 8 8 7 11 6 5 9 6 ...
$ renda : num [1:592] 3.13 0.72 2.41 1.69 1.93 1.92 2.65 2.53 0.48 1.92 ...
$ ig : num [1:592] 37 37 37 38 39 39 39 39 39 39 ...
$ tipoParto: Factor w/ 2 levels "normal","cesareo": 1 2 2 1 1 2 2 1 1 1 ...
$ fumo : Factor w/ 2 levels "sim","não": 2 2 1 2 1 1 2 2 2 2 ...
$ pesoRN : num [1:592] 3285 3100 3100 2800 3270 ...
$ sexo : Factor w/ 2 levels "masc","fem": 1 1 1 1 1 1 1 1 1 1 ...
O banco de dados meninos
é constituídos por 592 meninos. Isto representa 43.3% dos nascimentos.
Uma outra maneira de se fazer a mesma coisa, é usar a função grepl()
, dentro da função filter ()
. Ela é usada para pesquisar a correspondência de padrões. No código a seguir, pesquisa-se os registros em que a variável sexo
contém “fem”
, correspondentes às meninas.
<- filter (mater3, grepl("fem", sexo)) meninas
str(meninas)
tibble [493 × 10] (S3: tbl_df/tbl/data.frame)
$ idadeMae : num [1:493] 17 30 27 28 17 21 28 19 24 43 ...
$ altura : num [1:493] 1.65 1.6 1.53 1.4 1.55 1.52 1.58 1.55 1.72 1.6 ...
$ peso : num [1:493] 60 54 43.5 60 78 52 50 60.5 60 53 ...
$ anosEst : num [1:493] 7 5 11 8 10 11 11 8 8 4 ...
$ renda : num [1:493] 1.92 1.92 1.93 2.17 4.82 0.96 4.82 1.69 0.96 1.92 ...
$ ig : num [1:493] 38 39 39 38 40 38 37 38 40 39 ...
$ tipoParto: Factor w/ 2 levels "normal","cesareo": 1 2 1 1 2 1 1 1 1 1 ...
$ fumo : Factor w/ 2 levels "sim","não": 2 2 2 2 1 2 1 1 1 2 ...
$ pesoRN : num [1:493] 3165 3150 2980 3095 3020 ...
$ sexo : Factor w/ 2 levels "masc","fem": 2 2 2 2 2 2 2 2 2 2 ...
5.3.3 Função mutate()
Esta função tem a finalidade de computar ou anexar uma ou mais colunas (variáveis) novas.
O Índice de Massa Corporal (IMC) é igual a
\[IMC = \frac {peso}{altura ^2}\].
O peso deve ser expreso em kg e a altura em metros. Para acrescentar este indicador no banco de dados mater1
, se fará uso da função mutate()
, nomeando a nova variável de imc:
Será acrescentado a variável imc
, no banco de dados mater1
, usando a função mutate()
, nomenando essa variável de imc
:
<- mutate(mater1, imc = peso/altura^2)
mater1 str (mater1)
tibble [1,368 × 11] (S3: tbl_df/tbl/data.frame)
$ idadeMae : num [1:1368] 42 29 19 31 34 29 30 34 17 32 ...
$ altura : num [1:1368] 1.65 1.66 1.72 1.55 1.6 1.5 1.54 1.63 1.68 1.5 ...
$ peso : num [1:1368] 69.9 78 81 74 60 60 75.5 61 57 70 ...
$ anosEst : num [1:1368] 3 11 9 5 7 8 4 6 10 1 ...
$ renda : num [1:1368] 1.45 2.41 1.93 1.45 0.48 0.96 1.2 2.41 2.17 0.72 ...
$ ig : num [1:1368] 29 33 33 33 33 33 33 33 34 34 ...
$ tipoParto: Factor w/ 2 levels "normal","cesareo": 2 2 1 1 2 1 2 1 1 2 ...
$ fumo : Factor w/ 2 levels "sim","não": 2 2 2 2 2 1 1 2 2 2 ...
$ pesoRN : num [1:1368] 1035 2300 1580 1840 2475 ...
$ sexo : Factor w/ 2 levels "masc","fem": 2 2 2 2 2 2 2 2 2 2 ...
$ imc : num [1:1368] 25.7 28.3 27.4 30.8 23.4 ...
5.3.4 Função sample_n()
Função usada para selecionar de forma aleatória linhas de um dataframe. Acostume-se a usar a ajuda (?sample_n
) para obter informações das funções. Os seus argumentos básicos são:
- tbl \(\to\) dataframe
- size \(\to\) número de linhas para selecionar
- replace \(\to\) amostra com ou sem reposição?. Padrão = FALSE
Uma mostra de 20 neonatos do banco de dados meninos, pode ser selecionada, usando a função sample_n
:
<- sample_n(meninos, 20) meninos1
Assim, selecionou-se uma amostra de 20 meninos do banco de dados de recém-nascidos a termo. Pode-se, fazer um resumo da variável peso do recém-nascido (meninos1$pesoRN
) para ver como ela se comporta, usando a função summary()
:
summary(meninos1$pesoRN)
Min. 1st Qu. Median Mean 3rd Qu. Max.
2590 3139 3368 3343 3458 4400
É importante mencionar que toda vez que a função sample_n()
for executada, ela irá gerar uma amostra aleatória diferente. Em consequência não se deve esperar, por exemplo, que a média dos pesos dos recém-nascidos de amostras diferentes sejam iguais.
<- sample_n(meninos, 20)
meninos2 summary(meninos2$pesoRN)
Min. 1st Qu. Median Mean 3rd Qu. Max.
2285 2881 3148 3171 3375 4050
Na Seção 9.2.2 (Distribuições Amostrais), este assunto voltará à cena.
A função sample_n()
está sendo eliminada, pois será substituída por slice_sample()
do conjunto de funções que acompanham a função slice()
.
5.3.5 Função slice()
Esta função é usada para selecionar um subconjunto linhas com base em seus locais inteiros. Permite selecionar, remover e duplicar linhas. Para os exemplos, será usado o conjunto de dados meninos
, criado acima. Os argumentos básicos da função slice()
são
- .data \(\to\) dataframe
- .by \(\to\) seleciona por grupo
- n, prop \(\to\) fornecer n, o número de linhas, ou prop, a proporção de linhas a serem selecionadas.
Exemplpos:
# Selecionando a linha 10
slice(.data = meninos, 10)
# A tibble: 1 × 10
idadeMae altura peso anosEst renda ig tipoParto fumo pesoRN sexo
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <fct> <fct> <dbl> <fct>
1 14 1.51 56.7 6 1.92 39 normal não 3200 masc
# Selecionando varias linhas, por exemplo, de 1 a 5
slice(.data = meninos, 1:5)
# A tibble: 5 × 10
idadeMae altura peso anosEst renda ig tipoParto fumo pesoRN sexo
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <fct> <fct> <dbl> <fct>
1 28 1.5 48.5 6 3.13 37 normal não 3285 masc
2 31 1.55 65 5 0.72 37 cesareo não 3100 masc
3 27 1.6 60 8 2.41 37 cesareo sim 3100 masc
4 28 1.58 47 8 1.69 38 normal não 2800 masc
5 18 1.76 65.5 7 1.93 39 normal sim 3270 masc
É possível também selecionar linhas de acordo com determinado grupo. Como grupo, será usada a variável fumo
que tem dois níveis (sim
e não
). Será selecionada uma linha de cada grupo:
slice(.data = meninos, .by = fumo, 1)
# A tibble: 2 × 10
idadeMae altura peso anosEst renda ig tipoParto fumo pesoRN sexo
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <fct> <fct> <dbl> <fct>
1 28 1.5 48.5 6 3.13 37 normal não 3285 masc
2 27 1.6 60 8 2.41 37 cesareo sim 3100 masc
Para separar por grupo , é possível usar a função group_by()
, incluída no pacote dplyr
. A melhor solução, neste caso, para aplicar diversas funções de manipulação em um dataframe é aplicar o operador pipe: %>%
. No final desta seção, será discutido com mais detalhes este operador.
%>%
meninos group_by(fumo) %>%
slice (1)
# A tibble: 2 × 10
# Groups: fumo [2]
idadeMae altura peso anosEst renda ig tipoParto fumo pesoRN sexo
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <fct> <fct> <dbl> <fct>
1 27 1.6 60 8 2.41 37 cesareo sim 3100 masc
2 28 1.5 48.5 6 3.13 37 normal não 3285 masc
A saída desse código é a mesma vista anteriormente. A vantagem é termos escrito o código na ordem em que as funções são aplicadas. Portanto, é um código mais legível.
5.3.5.1 Funções auxiliares da função slice()
A função slice()
é acompanhada por várias funções auxiliares para casos de uso comuns:
slice_head()
eslice_tail()
selecionam a primeira ou a última linha;slice_sample()
seleciona linhas aleatoriamente, substitui asample_n()
;slice_min()
eslice_max()
selecionam linhas com valores mais altos ou mais baixos de uma variável.
Por exemplo, para selecionar uma amostra aleatória de 20 meninos do conjunto de dados meninos
, pode-se usar a função slice_sample()
:
<- slice_sample(.data = meninos, n = 20)
meninos3 str (meninos3)
tibble [20 × 10] (S3: tbl_df/tbl/data.frame)
$ idadeMae : num [1:20] 20 31 19 19 34 27 18 26 25 39 ...
$ altura : num [1:20] 1.68 1.55 1.67 1.68 1.67 1.65 1.58 1.63 1.54 1.61 ...
$ peso : num [1:20] 59 53 45 75 73 60 70 61 54 70 ...
$ anosEst : num [1:20] 14 3 8 11 4 7 11 7 3 8 ...
$ renda : num [1:20] 2.41 1.92 0.92 1.69 1.92 1.45 1.2 3.86 1.45 1.92 ...
$ ig : num [1:20] 39 40 37 40 40 39 39 39 37 37 ...
$ tipoParto: Factor w/ 2 levels "normal","cesareo": 1 1 1 1 1 1 1 1 2 1 ...
$ fumo : Factor w/ 2 levels "sim","não": 2 2 2 2 2 1 2 2 2 2 ...
$ pesoRN : num [1:20] 3075 3135 2745 4080 3847 ...
$ sexo : Factor w/ 2 levels "masc","fem": 1 1 1 1 1 1 1 1 1 1 ...
Como se observa no código, o argumento n
da função deve ser nomeado explicitamente (n = 20
). É possível também usar o argumento prop
, colocando a proporção de linhas que se deseja selecionar. Se o objetivo é selecionar 10% da amostra, coloca-se o argumento como prop = 0.10
. Como o dataframe meninos
contém 592 casos, serão selecionados 59. Além disso, a função permite selecionar por grupos com o argumento by =
.
<- slice_sample(.data = meninos, prop = 0.10)
meninos4 str (meninos4)
tibble [59 × 10] (S3: tbl_df/tbl/data.frame)
$ idadeMae : num [1:59] 29 20 30 22 31 26 19 22 23 27 ...
$ altura : num [1:59] 1.71 1.47 1.53 1.65 1.57 1.63 1.68 1.55 1.55 1.66 ...
$ peso : num [1:59] 87 48 57 65 41 61 58 46 63.5 66 ...
$ anosEst : num [1:59] 10 9 8 7 11 7 10 6 8 8 ...
$ renda : num [1:59] 1.92 0.96 1.69 1.93 2.41 3.86 4.82 1.92 1.93 2.24 ...
$ ig : num [1:59] 41 40 40 37 39 39 39 39 39 40 ...
$ tipoParto: Factor w/ 2 levels "normal","cesareo": 1 1 2 1 1 1 2 1 2 1 ...
$ fumo : Factor w/ 2 levels "sim","não": 2 2 2 2 1 2 2 2 2 2 ...
$ pesoRN : num [1:59] 4660 2340 3275 2405 2700 ...
$ sexo : Factor w/ 2 levels "masc","fem": 1 1 1 1 1 1 1 1 1 1 ...
Para maiores informações em relação a estas funções consulte a ajuda (?slice()
).
5.3.6 Função arrange()
Ordena as linhas pelos valores de uma coluna de forma ascendente ou descentente.
Voltando a amostra meninos1
, será colocado em ordem crescente a variável pesoRN
:
arrange(meninos1, pesoRN)
# A tibble: 20 × 10
idadeMae altura peso anosEst renda ig tipoParto fumo pesoRN sexo
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <fct> <fct> <dbl> <fct>
1 19 1.53 53 11 10.7 40 normal não 2590 masc
2 27 1.5 74 10 0.96 39 normal não 2960 masc
3 35 1.58 74 11 1.93 39 cesareo não 2965 masc
4 22 1.54 55 7 4.82 40 normal não 3025 masc
5 21 1.65 60 10 2.17 38 normal não 3105 masc
6 20 1.67 69 10 1.93 40 cesareo sim 3150 masc
7 34 1.55 53 7 1.69 38 cesareo sim 3170 masc
8 24 1.56 60 8 1.3 40 cesareo sim 3230 masc
9 22 1.6 60 5 1.69 38 normal sim 3270 masc
10 25 1.55 70 11 2.89 41 cesareo não 3355 masc
11 18 1.55 51 8 0.92 39 normal não 3380 masc
12 16 1.47 49 8 1.92 39 cesareo não 3385 masc
13 32 1.55 70 4 1.22 39 normal sim 3410 masc
14 33 1.44 47.2 2 1.92 39 cesareo sim 3415 masc
15 22 1.6 70 5 3.86 39 normal não 3440 masc
16 41 1.51 99 3 0.72 37 cesareo sim 3510 masc
17 21 1.55 62 8 4.82 39 normal não 3560 masc
18 19 1.63 51 11 1.92 39 normal não 3710 masc
19 23 1.73 58 10 3.33 39 normal não 3830 masc
20 17 1.47 65 10 1.69 38 cesareo não 4400 masc
Para a ordem decrescente, colocar a função desc()
, dentro da função arrange()
arrange(meninos1, desc(pesoRN))
# A tibble: 20 × 10
idadeMae altura peso anosEst renda ig tipoParto fumo pesoRN sexo
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <fct> <fct> <dbl> <fct>
1 17 1.47 65 10 1.69 38 cesareo não 4400 masc
2 23 1.73 58 10 3.33 39 normal não 3830 masc
3 19 1.63 51 11 1.92 39 normal não 3710 masc
4 21 1.55 62 8 4.82 39 normal não 3560 masc
5 41 1.51 99 3 0.72 37 cesareo sim 3510 masc
6 22 1.6 70 5 3.86 39 normal não 3440 masc
7 33 1.44 47.2 2 1.92 39 cesareo sim 3415 masc
8 32 1.55 70 4 1.22 39 normal sim 3410 masc
9 16 1.47 49 8 1.92 39 cesareo não 3385 masc
10 18 1.55 51 8 0.92 39 normal não 3380 masc
11 25 1.55 70 11 2.89 41 cesareo não 3355 masc
12 22 1.6 60 5 1.69 38 normal sim 3270 masc
13 24 1.56 60 8 1.3 40 cesareo sim 3230 masc
14 34 1.55 53 7 1.69 38 cesareo sim 3170 masc
15 20 1.67 69 10 1.93 40 cesareo sim 3150 masc
16 21 1.65 60 10 2.17 38 normal não 3105 masc
17 22 1.54 55 7 4.82 40 normal não 3025 masc
18 35 1.58 74 11 1.93 39 cesareo não 2965 masc
19 27 1.5 74 10 0.96 39 normal não 2960 masc
20 19 1.53 53 11 10.7 40 normal não 2590 masc
5.3.7 Função count()
Permite contar rapidamente os valores únicos de uma ou mais variáveis. Esta função tem os seguintes argumentos:
- x \(\to\) dataframe
- wt \(\to\) pode ser NULL (padrão) ou uma variável
- sort \(\to\) padrão = FALSE; se TRUE, mostrará os maiores grupos no topo
- name \(\to\) O nome da nova coluna na saída; padrão = NULL
Quando o argumento name
é omitido, a função retorna n como nome padrão.
Usando o dataframe mater1
, a função count()
irá contar o número de parturientes fumantes, variável dicotômica fumo
:
count(mater1, fumo)
# A tibble: 2 × 2
fumo n
<fct> <int>
1 sim 301
2 não 1067
5.3.8 Operador pipe %>%
O operador pipe %>%
pode ser usado para inserir um valor ou um objeto no primeiro argumento de uma função. Ele pode ser acionado digitando %>%
ou usando o atalho ctrl + shift + M
. Em vez de passar o argumento para a função separadamente, é possível escrever o valor ou objeto e, em seguida, usar o pipe
para convertê-lo como o argumento da função na mesma linha. Funciona como se o pipe
jogasse o objeto dentro da função seguinte.
Vários comando foram utilizados, manipulando o banco de dados mater.
Alguns procedimentos, serão mostrados, usando, agora, o operador pipe.
Em primeiro lugar, serão selecionadas algumas colunas do dataframe mater
; adicionada a variável imc
; selecionado os recém-nascidos a termo do sexo masculino, que no banco de dados mater
está codificado como 1. Tudo em um só comando!
<- mater %>%
meusDados select(idadeMae, altura, peso, anosEst, renda,
%>%
ig, tipoParto, fumo, pesoRN, sexo) mutate(imc = peso/altura^2) %>%
filter (ig>=37 & ig<42, sexo == 1)
str(meusDados)
tibble [592 × 11] (S3: tbl_df/tbl/data.frame)
$ idadeMae : num [1:592] 28 31 27 28 18 28 22 28 25 14 ...
$ altura : num [1:592] 1.5 1.55 1.6 1.58 1.76 1.63 1.54 1.55 1.56 1.51 ...
$ peso : num [1:592] 48.5 65 60 47 65.5 72 65 74 70 56.7 ...
$ anosEst : num [1:592] 6 5 8 8 7 11 6 5 9 6 ...
$ renda : num [1:592] 3.13 0.72 2.41 1.69 1.93 1.92 2.65 2.53 0.48 1.92 ...
$ ig : num [1:592] 37 37 37 38 39 39 39 39 39 39 ...
$ tipoParto: num [1:592] 1 2 2 1 1 2 2 1 1 1 ...
$ fumo : num [1:592] 2 2 1 2 1 1 2 2 2 2 ...
$ pesoRN : num [1:592] 3285 3100 3100 2800 3270 ...
$ sexo : num [1:592] 1 1 1 1 1 1 1 1 1 1 ...
$ imc : num [1:592] 21.6 27.1 23.4 18.8 21.1 ...
Observe que o dataframe mater
aparece apenas no início e, como ele é um argumento das outras funções, ele é transferido, automaticamente, não havendo necessidade de escrever dentro na função.
No final, retornará um novo dataframe que foi colocado em um objeto, denominado meuDados
, o qual contém informações de todos os 592 meninos, nascidos a termo e de suas mães.
5.4 Manipulação de datas
Originalmente, todos os que trabalham com o R queixavam-se de como era frustrante trabalhar com datas. Era um processo que causava grande perda de tempo nas análises. O pacote lubridate
(6) foi criado para simplificar ao máximo a leitura de datas e extração de informações das mesmas.
Quando o lubridate
é carregado aparece uma mensagem, avisando que alguns nomes de funções também estão contidas no pacote base do R.
library(lubridate)
Anexando pacote: 'lubridate'
Os seguintes objetos são mascarados por 'package:base':
date, intersect, setdiff, union
Para evitar confusões e verificar que as funções corretas estão sendo usadas, usa-se o duplo dois pontos (::
) antes do nome da função, precedido do nome do pacote, por exemplo: lubridate::date()
.
Para obter a data atual ou a data-hora, você pode usar as funções today()
7 ou now()
8:
today()
[1] "2025-06-22"
now()
[1] "2025-06-22 20:28:10 -03"
5.4.1 Convertendo strings ou caractere para data
Para converter string ou caracteres em datas, basta executar funções específicas adequadas aos dados. Elas determinam automaticamente o formato quando você especifica a ordem do componente. Para usá-los, identifique a ordem em que o ano, o mês e o dia aparecem em suas datas e, em seguida, organize “y”, “m” e “d” na mesma ordem. Isso lhe dá o nome da função do lubridate
que analisará a data. Por exemplo, suponhamos a data de 25/12/2022:
<- "25/12/2022"
natal natal
[1] "25/12/2022"
Aparentemente, o R aceitou a informação como uma data. Entretanto, se for verificada a classe do objeto, tem-se:
class(natal)
[1] "character"
Estando como caractere, esta data não poderá ser usada em operações com datas, pois necessitaria estar como uma classe date
. Para converte-la em data, usa-se a função dmy()
:
<- dmy(natal)
natal natal
[1] "2022-12-25"
class(natal)
[1] "Date"
Dessa forma, a data, agora está sendo reconhecida pelo R como date
. É sempre importante verificar a classe da data.
Às vezes, as datas escritas estão com o mês abreviado, como 25/dez/2022. O procedimento é o mesmo
<- "25/dez/2022"
minha.data class (minha.data)
[1] "character"
<- dmy(minha.data)
minha.data class (minha.data)
[1] "Date"
Se além da data, houver necessidade de especificar o horário, basta usar dmy_h()
, dmy_hm()
e dmy_hms()
. No padrão americano, pode ser usado ymd()
.
O lubridate
traz diversas funções para extrair os componentes de um objeto da classe date.
second()
\(\rightarrow\) extrai os segundos.minute()
\(\rightarrow\) extrai os minutos.hour()
\(\rightarrow\) extrai a hora.wday()
\(\rightarrow\) extrai o dia da semana.mday()
\(\rightarrow\) extrai o dia do mês.month()
\(\rightarrow\) extrai o mês.year()
\(\rightarrow\) extrai o ano.
Por exemplo, usando a data de nascimento (dn
) de um dos netos do autor:
<- dmy("06/06/2018")
dn year(dn)
[1] 2018
Para acrescentar um horário ao objeto data de nascimento (dn
)^[UTC = Coordinated Universal Time}:
hour(dn) <- 18
dn
[1] "2018-06-06 18:00:00 UTC"
5.4.2 Juntando componentes de datas
Para juntar componentes de datas e horas, pode-se utilizar as funções make_date()
e make_datetime()
. Em muitos arquivos, os componentes da data estão em colunas diferentes e há necessidade de juntá-los em uma única coluna para compor a data:
<- make_date(year = 2018, month = 06, day = 06)
felix felix
[1] "2018-06-06"
Para juntar ano, mês, dia, hora e minuto:
<- make_datetime(year = 2018,
minha.data month = 06,
day = 06,
hour = 18 ,
min = 00,
sec = 15)
minha.data
[1] "2018-06-06 18:00:15 UTC"
5.4.3 Extraindo componentes de datas
Quando temos objetos do tipo POSIXt9 podemos extrair componentes ou elementos deles. Para isso são usadas algumas funções específicas do pacote lubridate
como mostrado a seguir.
<- now()
data
year(data) # Extrai o ano
[1] 2025
month(data) # Extrai o mês
[1] 6
week(data) # Extrai a semana
[1] 25
day(data) # Extrai o dia
[1] 22
minute(data) # Extrai o minuto
[1] 28
second(data) # Extrai o segundo
[1] 10.48674
Para verificar o número de dias tem em um determinado mês, usa-se a função days_in_month()
:
<- dmy("25/02/2000")
data1 days_in_month(data1)
Feb
29
5.4.4 Operações com datas
O pacote lubridate
possui funções de duração e de período para manipular as datas. As funções de duração calculam o número de segundos em um determinado num determinado número de dias. As funções de duração não levam em consideração anos bissextos e horário de verão, enquanto as funções de período consideram esses fatores.
ddays (1) # Número de segundos em 1 dia
[1] "86400s (~1 days)"
dhours (1) # Número de segundos em 1 hora
[1] "3600s (~1 hours)"
dminutes (1) # Número de segundos em 1 minuto
[1] "60s (~1 minutes)"
days (5) # Cria um período de 5 dias
[1] "5d 0H 0M 0S"
weeks (5) # Cria um período de 5 semanas
[1] "35d 0H 0M 0S"
Suponha-se que haja necessidade de saber em qual dia cairá após acrescentarmos 5 semanas à data1
(25/02/2000), criada acima:
+ weeks (5) data1
[1] "2000-03-31"
Adicionando 1 ano à data1
(25/02/2000) com uma função de duração, tem-se:
+ dyears (1) data1
[1] "2001-02-24 06:00:00 UTC"
Se for adicionado um ano à mesma data, mas agora com uma função de período, tem-se:
+ years (1) data1
[1] "2001-02-25"
Um intervalo de tempo pode ser obtido a partir de uma data inicial e uma data final. Suponha que uma gestante tenha como data da sua última menstruação 04/10/2022 e o bebê tenha nascido em 30/06/2023. Qual a idade gestacional em dias? A sintaxe para calcular um intervalo é dada pela subtração das duas datas:
<- dmy("04/10/2022")
data.inicial <- dmy("30/06/2023")
data.final <- data.final - data.inicial
idade_gesta idade_gesta
Time difference of 269 days
Ou seja a gestação durou 269 dias, constituindo-se em um parto a termo, entre 37 (259 dias) e 42 semanas (294 dias).
Para mais informações sobre o lubridate
, consulte a ajuda do pacote ou o capítulo 16 do livro R for Data Science, Hadley Wickman e Garrett Grolemund, 2017 [https://r4ds.had.co.nz/index.html] .
A mudança do nome do dataframe de
dadosNeonatos
paraneonatos
é desnecessária. Foi realizada apenas por questões didáticas.↩︎Observe, na saída, que a variável
utiNeo
aparece palavras com acentuação (“não”). Às vezes, ao abrir o arquivo com a funçãoread.csv2()
, pode acontecer de esta palavra aparecer, por exemplo, como: “n3o”. Louco, não é? Se ocorrer isso, use, após o nome do arquivo e separado por vírgula, o argumentofileEncoding = “latin1”
. Dessa forma, o erro será corrigido.↩︎Da mesma maneira, como acontece com a função
read.csv2()
, a função equivalente doreadr
pode retornar erro na leitura de palavras com acento. Para corrigir isso, usa-se o argumentolocale (encoding = "latin1")
↩︎ATENÇÃO: Volta-se a insistir, o comando para carregar o conjunto de dados somente funciona, sem colocar o caminho (path) completo, se tudo está sendo realizado no diretório de trabalho.↩︎
Conjunto de dados coletados na maternidade-escola do Hospital Geral de Caxias do Sul↩︎
Lembrar que o sinal de igualdade, no R, é duplo \(=\)↩︎
Equivalente ao
Sys.Date()
que acessa a data do sistema operacional.↩︎Equivalente ao
Sys.time()
que acessa a data e hora do sistema operacional.↩︎POSIXt é uma classe de objetos do R que representa datas e horas. POSIXt significa Portable Operating System Interface for Unix Time, que é um padrão para medir o tempo em segundos desde 1 de janeiro de 1970. Existem duas formas internas de implementar POSIXt: POSIXct e POSIXlt. POSIXct armazena os segundos desde a época UNIX e POSIXlt armazena uma lista de dia, mês, ano, hora, minuto, segundo, etc.↩︎