Capítulo 5 Manipulando os dados no R Studio
5.1 Importando dados de outros softwares
Foi visto. quando estudou-se os dataframes, que é possível inserir dados diretamente no R. 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 oRreconheç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 noRbase, 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). Em 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 aoRqual 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 no link 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
10:
Use a função str()
para visualizar o conjunto de dados:11
## '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
(61), 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 doRbase. 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, neste mesmo capítulo) 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
):
## ℹ 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 12:
## 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 no link e salve em seu diretório de trabalho.
Os dados serão atribuídos a um objeto com outro nome (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 pacote, no caso readr
, 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 (61). Para saber mais sobre tibble
, veja vignette(‘tibbles’).
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
(62). 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 (63), 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 (64) 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:
## '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:
## # 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 (65). 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
(66) 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.
A função read_excel()
carrega o arquivo e o atribui a um objeto , arbitrariamente, denominado de mater
13.
## # 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
14 é mostrado abaixo.
- id \(\longrightarrow\) identificação do participante
- idadeMae \(\longrightarrow\) idade da parturiente em anos
- altura \(\longrightarrow\) altura da parturiente em metros
- peso \(\longrightarrow\) peso da parturiente em kg
- ganhoPeso \(\longrightarrow\) aumento de peso durante a gestação
- anosEst \(\longrightarrow\) anos de estudo completos
- cor \(\longrightarrow\) cor declarada pela parturiente: 1 = branca; 2 = não branca
- eCivil \(\longrightarrow\) estado civil: 1 = solteira; 2 = casada ou companheira
- renda \(\longrightarrow\) renda familiar em salários minimos
- fumo \(\longrightarrow\) tabagismo: 1 = sim; 2 = não
- quantFumo \(\longrightarrow\) quantidade de cigarros fumados diariamente
- prenatal \(\longrightarrow\) realizou pelo menos 6 consultas no pré-natal? 1 = sim; 2 = não
- para \(\longrightarrow\) número de filhos paridos
- droga \(\longrightarrow\) drogadição? 1 = sim; 2 = não
- ig \(\longrightarrow\) idade gestacional em semanas
- tipoParto \(\longrightarrow\) tipo de parto: 1 = normal; 2 = cesareana
- pesoPla \(\longrightarrow\) peso da placenta em gramas
- sexo \(\longrightarrow\) sexo do recém-nascido (RN): 1 = masc; 2 = fem
- pesoRN \(\longrightarrow\) peso do RN em gramas
- compRN \(\longrightarrow\) comprimento do RN em cm
- pcRN \(\longrightarrow\) perímetro cefálico dorecém-nascido em cm
- apgar1 \(\longrightarrow\) escore de Apgar no primeiro minuto
- apgar5 \(\longrightarrow\) escore de Apgar no quinto minuto
- utiNeo \(\longrightarrow\) RN necessitou de terapia intesiva? 1 = sim; 2 = não
- obito \(\longrightarrow\) obito no período neonatal? 1 = sim; 2 = não
- hiv \(\longrightarrow\) parturiente portadora de HIV? 1 = sim; 2 = não
- sifilis \(\longrightarrow\) paruriente portadora de sífilis? 1 = sim; 2 = não
- rubeola \(\longrightarrow\) paruriente portadora de rubéola? 1 = sim; 2 = não
- toxo \(\longrightarrow\) paruriente portadora de toxoplasmose? 1 = sim; 2 = não
- infCong \(\longrightarrow\) paruriente 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 com 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:
Para visualizar este novo banco de dados, pode-se usar a função str()
:
## 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 serem modificadas. Entretanto, das selecionadas, para constituir o novo banco de dados, apenas tipoParto
, fumo
e sexo
necessitam serem transformadas para fator:
mater1$tipoParto <- factor(mater1$tipoParto,
levels = c(1,2),
labels = c("normal","cesareo"))
mater1$fumo <- factor (mater1$fumo,
levels = c(1,2),
labels = c('sim','não'))
mater1$sexo <- factor (mater1$sexo,
levels = c(1,2),
labels = c("masc","fem"))
Usando, de novo, a função str()
, é possível observar a transformação:
## 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:
## 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 \(\longrightarrow\) seleciona y e não x
- x & !y \(\longrightarrow\) seleciona x e não y
- x | !x \(\longrightarrow\) seleciona x ou y
- x & !x \(\longrightarrow\) 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, pode-se usar a função filter()
:
Para exibir o resultado, execute a função str()
:
## 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 maneira15:
## 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 o mesmo é 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.
## 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
:
## 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. Sempre consulte a ajuda (?sample_n
) para obter informações das funções. Os seus argumentos básicos são:
- tbl \(\longrightarrow\) dataframe
- size \(\longrightarrow\) número de linhas para selecionar
- replace \(\longrightarrow\) 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
:
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()
:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2285 3018 3200 3171 3444 3575
É importante mencionar que toda vez que esta função for executada ela irá gerar uma amostra diferente. Então, por exemplo, não se deve esperar que a média dos pesos dos recém-nascidos de amostras diferentes sejam iguais.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1810 3145 3330 3350 3670 4120
No capítulo 9 sobre Distribuições Amostrais, este assunto voltará à cena.
As funções sample_n()
estão com os dias contados, pois foram substituídas 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 ⟶ dataframe
- .by ⟶ seleciona por grupo
- n, prop ⟶ fornecer n, o número de linhas, ou prop, a proporção de linhas a serem selecionadas.
- …
Exemplpos:
## # 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
## # 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:
## # 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 separa 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.
## # 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()
e slice_tail()
selecionam a primeira ou a última linha;
* slice_sample()
seleciona linhas aleatoriamente, substitui a sample_n()
;
* slice_min()
e slice_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()
:
## tibble [20 × 10] (S3: tbl_df/tbl/data.frame)
## $ idadeMae : num [1:20] 35 35 21 25 19 24 28 29 29 30 ...
## $ altura : num [1:20] 1.65 1.65 1.55 1.62 1.6 1.49 1.53 1.55 1.55 1.55 ...
## $ peso : num [1:20] 59.5 56 60 80 58 60 78 70 68 58 ...
## $ anosEst : num [1:20] 11 11 8 8 8 11 8 5 11 8 ...
## $ renda : num [1:20] 1.93 2.41 1.92 2.17 1.69 2.41 0.96 0.96 2.89 1.45 ...
## $ ig : num [1:20] 40 38 41 40 39 38 40 39 39 39 ...
## $ tipoParto: Factor w/ 2 levels "normal","cesareo": 1 1 1 2 1 2 1 1 2 2 ...
## $ fumo : Factor w/ 2 levels "sim","não": 2 2 2 2 1 2 1 1 2 2 ...
## $ pesoRN : num [1:20] 3660 2980 3530 3600 2675 ...
## $ 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 =
.
## tibble [59 × 10] (S3: tbl_df/tbl/data.frame)
## $ idadeMae : num [1:59] 42 31 34 27 32 24 31 14 41 28 ...
## $ altura : num [1:59] 1.65 1.51 1.53 1.65 1.49 1.6 1.65 1.51 1.68 1.64 ...
## $ peso : num [1:59] 70 48 53 82 52 61 90 49 94 91 ...
## $ anosEst : num [1:59] 6 4 4 6 1 9 5 6 8 6 ...
## $ renda : num [1:59] 1.93 1.2 1.28 0.53 0.89 2.41 1.45 1.93 1.45 1.69 ...
## $ ig : num [1:59] 39 39 40 40 38 40 41 39 37 40 ...
## $ tipoParto: Factor w/ 2 levels "normal","cesareo": 1 2 2 1 2 1 1 2 2 1 ...
## $ fumo : Factor w/ 2 levels "sim","não": 2 2 2 1 2 2 1 2 2 2 ...
## $ pesoRN : num [1:59] 3190 3160 3035 3685 3315 ...
## $ 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
:
## # 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 26 1.57 58 4 1.92 37 cesareo não 2285 masc
## 2 29 1.5 56 6 2.89 39 cesareo não 2400 masc
## 3 20 1.55 53 6 1.92 37 normal não 2880 masc
## 4 22 1.65 65 6 1.93 40 cesareo sim 2900 masc
## 5 20 1.72 69 9 1.2 37 cesareo não 3010 masc
## 6 31 1.61 58 3 2.17 39 cesareo não 3020 masc
## 7 24 1.66 67 10 1.45 40 normal não 3030 masc
## 8 19 1.56 68 8 1.69 39 cesareo não 3150 masc
## 9 33 1.51 57 6 0.96 37 cesareo não 3170 masc
## 10 29 1.6 55.6 8 4.82 39 normal sim 3175 masc
## 11 36 1.57 57.5 11 4.82 39 normal não 3225 masc
## 12 22 1.55 82.5 10 1.4 41 normal não 3335 masc
## 13 29 1.55 68 11 2.89 39 cesareo não 3400 masc
## 14 34 1.57 58 11 1.69 40 normal não 3420 masc
## 15 20 1.56 61 7 1.69 39 normal não 3435 masc
## 16 13 1.54 47.2 6 2.41 37 cesareo não 3469 masc
## 17 32 1.56 66 5 2.41 40 normal não 3470 masc
## 18 21 1.55 60 8 1.92 41 normal não 3530 masc
## 19 25 1.7 118 8 1.93 37 normal não 3540 masc
## 20 31 1.68 79 7 2.89 39 cesareo não 3575 masc
Para a ordem decrescente, colocar a função desc()
, dentro da função arrange()
## # 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 31 1.68 79 7 2.89 39 cesareo não 3575 masc
## 2 25 1.7 118 8 1.93 37 normal não 3540 masc
## 3 21 1.55 60 8 1.92 41 normal não 3530 masc
## 4 32 1.56 66 5 2.41 40 normal não 3470 masc
## 5 13 1.54 47.2 6 2.41 37 cesareo não 3469 masc
## 6 20 1.56 61 7 1.69 39 normal não 3435 masc
## 7 34 1.57 58 11 1.69 40 normal não 3420 masc
## 8 29 1.55 68 11 2.89 39 cesareo não 3400 masc
## 9 22 1.55 82.5 10 1.4 41 normal não 3335 masc
## 10 36 1.57 57.5 11 4.82 39 normal não 3225 masc
## 11 29 1.6 55.6 8 4.82 39 normal sim 3175 masc
## 12 33 1.51 57 6 0.96 37 cesareo não 3170 masc
## 13 19 1.56 68 8 1.69 39 cesareo não 3150 masc
## 14 24 1.66 67 10 1.45 40 normal não 3030 masc
## 15 31 1.61 58 3 2.17 39 cesareo não 3020 masc
## 16 20 1.72 69 9 1.2 37 cesareo não 3010 masc
## 17 22 1.65 65 6 1.93 40 cesareo sim 2900 masc
## 18 20 1.55 53 6 1.92 37 normal não 2880 masc
## 19 29 1.5 56 6 2.89 39 cesareo não 2400 masc
## 20 26 1.57 58 4 1.92 37 cesareo não 2285 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 \(\longrightarrow\) dataframe
- wt \(\longrightarrow\) pode ser NULL (padrão) ou uma variável
- sort \(\longrightarrow\) padrão = FALSE; se TRUE, mostrará os maiores grupos no topo
- name \(\longrightarrow\) 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
:
## # 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 orocedimentos, 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!
meusDados <- mater %>%
select(idadeMae, altura, peso, anosEst, renda,
ig, tipoParto, fumo, pesoRN, sexo) %>%
mutate(imc = peso/altura^2) %>%
filter (ig>=37 & ig<42, sexo == 1)
## 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
foi criado (67) para simplificar ao máximo a leitura de datas e extração de informações dessas datas.
Quando o lubridate
é carregado aparece uma mensagem, avisando que alguns nomes de funções também estão contidas no pacote base do R.
##
## 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()
16 ou now()17:
## [1] "2024-09-11"
## [1] "2024-09-11 16:37:49 -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 lubridate
que analisará a data. Por exemplo, suponhamos a data de 25/12/2022:
## [1] "25/12/2022"
Aparentemente, o R aceitou a informação como uma data. Entretanto, se for verificada a classe do objeto, tem-se:
## [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()
:
## [1] "2022-12-25"
## [1] "Date"
Dessa forma, a data, agora está sendo reconhecida pelo R como date
. Como se verifica, é sempre importante verificar a classe da data.
Às vezes, observa-se datas escritas com o mês abreviado, como 25/dez/2022. O procedimento é o mesmo
## [1] "character"
## [1] "Date"
Se além da data, houver necessidade de especificar o horário, basta usar dmy_h()
, dmy_hm()
e dmy_hms()
. Se for usado o 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
) do autor:
## [1] 1947
Para acrescentar um horário ao objeto data de nascimento (dn
)^[UTC = Coordinated Universal Time}:
## [1] "1947-10-04 04:00:00 UTC"
5.4.2 Juntando componenetes 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:
## [1] "1947-10-04"
Para juntar ano, mês, dia, hora e minuto:
minha.data <- make_datetime(year = 1947,
month = 10,
day = 04,
hour = 04 ,
min = 30,
sec = 15)
minha.data
## [1] "1947-10-04 04:30:15 UTC"
5.4.3 Extraindo componentes de datas
Quando temos objetos do tipo POSIXt18 podemos extrair componentes ou elementos deles. Para isso são usadas algumas funções específicas do pacote lubridate
como mostrado a seguir.
## [1] 2024
## [1] 9
## [1] 37
## [1] 11
## [1] 37
## [1] 50.12195
Para verificar o número de dias tem em um determinado mês, usa-se a função days_in_month()
:
## 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.
## [1] "86400s (~1 days)"
## [1] "3600s (~1 hours)"
## [1] "60s (~1 minutes)"
## [1] "5d 0H 0M 0S"
## [1] "35d 0H 0M 0S"
Suponhamos que se necessita saber em qual dia cairá após acrescentarmos 5 semanas à data1
(25/02/2000), criada acima:
## [1] "2000-03-31"
Adicionando 1 ano à data1
(25/02/2000) com uma função de duração, tem-se:
## [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:
## [1] "2001-02-25"
Pode-se definir um intervalo de tempo a partir de uma data inicial e uma data final. A sintaxe para calcular um intervalo é dada por data.inicial %--% data.final
.Suponha que uma gestante tenha como data da sua última menstruação em 04/10/2022. O bebê nasceu em 30/06/2023. Qual o intervalo em dias?
data.inicial <- dmy("04/10/2022")
data.final <- dmy("30/06/2023")
tempo <- (data.inicial %--% data.final) %/% days(1)
tempo
## [1] 269
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 para neonatos é desnecessária. Foi realizada apenas por questões didáticas.↩︎
Observe, na saída, que na 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.↩︎