Introdução ao R para análise de dados em Psicologia
Quem sou eu


- Psicólogo (UFC)
- Mestre em Psicologia (UFC)
- Doutor em educação (UFC)
- Professor do campus Sobral da UFC
- Recentemente, um entusiasta do R
Meu currículo lattes: acesse aqui
R for Data Science
R for Data Science
- Neste link você pode acessar a primeira edição do livro:
- E aqui você pode acessar a segunda edição que ainda está sendo finalizada:
Estes slides tem como base o conteúdo da segunda edição
8 Importação de dados
Pacotes necessários
8.2 Lendo dados de um arquivo
- CSV = comma-separated values (valores separados por vírgulas)
- estudantes.csv
ID do Aluno,Nome Completo,Comida Favorita,Plano de Refeição,Idade
1,Sunil Huffmann,Iogurte de Morango,Apenas Almoço,4
2,Barclay Lynn,Batata Frita,Apenas Almoço,5
3,Jayendra Lyne,N/A,Café da Manhã e Almoço,7
4,Leon Rossini,Anchovas,Apenas Almoço,NA
5,Chidiegwu Dunkel,Pizza,Café da Manhã e Almoço,cinco
6,Güvenç Attila,Sorvete,Apenas Almoço,6
Lendo arquivos CSV
| ID do Aluno | Nome Completo | Comida Favorita | Plano de Refeição | Idade |
|---|---|---|---|---|
| 1 | Sunil Huffmann | Iogurte de Morango | Apenas Almoço | 4 |
| 2 | Barclay Lynn | Batata Frita | Apenas Almoço | 5 |
| 3 | Jayendra Lyne | N/A | Café da Manhã e Almoço | 7 |
| 4 | Leon Rossini | Anchovas | Apenas Almoço | NA |
| 5 | Chidiegwu Dunkel | Pizza | Café da Manhã e Almoço | cinco |
| 6 | Güvenç Attila | Sorvete | Apenas Almoço | 6 |
Lendo arquivos CSV
estudantes <- read_csv("./data/estudantes.csv")Rows: 6 Columns: 5
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (4): Nome Completo, Comida Favorita, Plano de Refeição, Idade
dbl (1): ID do Aluno
ℹ 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.
estudantes# A tibble: 6 × 5
`ID do Aluno` `Nome Completo` `Comida Favorita` `Plano de Refeição` Idade
<dbl> <chr> <chr> <chr> <chr>
1 1 Sunil Huffmann Iogurte de Morango Apenas Almoço 4
2 2 Barclay Lynn Batata Frita Apenas Almoço 5
3 3 Jayendra Lyne N/A Café da Manhã e Almoço 7
4 4 Leon Rossini Anchovas Apenas Almoço <NA>
5 5 Chidiegwu Dunkel Pizza Café da Manhã e Almoço cinco
6 6 Güvenç Attila Sorvete Apenas Almoço 6
read_csv- Primeiro argumento: caminho do arquivo
- caminho = endereço: o arquivo
estudantes.csvmora na pastadata
- caminho = endereço: o arquivo
- O código funciona se o arquivo
estudantes.csvestiver na pastadata
Lendo arquivos CSV
- é possível ler o arquivo direto de uma URL (link) onde ele esteja armazenado
estudantes <- read_csv("https://tinyurl.com/estudcsv")Conselho prático
Depois de ler os dados, é necessário transformá-los para facilitar o trabalho no restante da análise
- valores ausentes
- nomes das variáveis
- tipos de variáveis
Lidando com códigos para valores ausentes
estudantes# A tibble: 6 × 5
`ID do Aluno` `Nome Completo` `Comida Favorita` `Plano de Refeição` Idade
<dbl> <chr> <chr> <chr> <chr>
1 1 Sunil Huffmann Iogurte de Morango Apenas Almoço 4
2 2 Barclay Lynn Batata Frita Apenas Almoço 5
3 3 Jayendra Lyne N/A Café da Manhã e Almoço 7
4 4 Leon Rossini Anchovas Apenas Almoço <NA>
5 5 Chidiegwu Dunkel Pizza Café da Manhã e Almoço cinco
6 6 Güvenç Attila Sorvete Apenas Almoço 6
- N/A parece ser um valor ausente válido na coluna
Comida Favorita- argumento
na =- padrão: reconhece espaços vazios (
"") comoNAs
- padrão: reconhece espaços vazios (
- argumento
Lidando com códigos para valores ausentes
# A tibble: 6 × 5
`ID do Aluno` `Nome Completo` `Comida Favorita` `Plano de Refeição` Idade
<dbl> <chr> <chr> <chr> <chr>
1 1 Sunil Huffmann Iogurte de Morango Apenas Almoço 4
2 2 Barclay Lynn Batata Frita Apenas Almoço 5
3 3 Jayendra Lyne <NA> Café da Manhã e Almoço 7
4 4 Leon Rossini Anchovas Apenas Almoço NA
5 5 Chidiegwu Dunkel Pizza Café da Manhã e Almoço cinco
6 6 Güvenç Attila Sorvete Apenas Almoço 6
Melhorando os nomes das variáveis
estudantes# A tibble: 6 × 5
`ID do Aluno` `Nome Completo` `Comida Favorita` `Plano de Refeição` Idade
<dbl> <chr> <chr> <chr> <chr>
1 1 Sunil Huffmann Iogurte de Morango Apenas Almoço 4
2 2 Barclay Lynn Batata Frita Apenas Almoço 5
3 3 Jayendra Lyne <NA> Café da Manhã e Almoço 7
4 4 Leon Rossini Anchovas Apenas Almoço NA
5 5 Chidiegwu Dunkel Pizza Café da Manhã e Almoço cinco
6 6 Güvenç Attila Sorvete Apenas Almoço 6
- Espaços: variáveis entre ``
- Maiúsculas e minúsculas
- acentos e ç
janitor::clean_names()
Melhorando os nomes das variáveis
estudantes <- estudantes |>
clean_names()
estudantes# A tibble: 6 × 5
id_do_aluno nome_completo comida_favorita plano_de_refeicao idade
<dbl> <chr> <chr> <chr> <chr>
1 1 Sunil Huffmann Iogurte de Morango Apenas Almoço 4
2 2 Barclay Lynn Batata Frita Apenas Almoço 5
3 3 Jayendra Lyne <NA> Café da Manhã e Almoço 7
4 4 Leon Rossini Anchovas Apenas Almoço NA
5 5 Chidiegwu Dunkel Pizza Café da Manhã e Almoço cinco
6 6 Güvenç Attila Sorvete Apenas Almoço 6
Organizando os tipos de variáveis
estudantes# A tibble: 6 × 5
id_do_aluno nome_completo comida_favorita plano_de_refeicao idade
<dbl> <chr> <chr> <chr> <chr>
1 1 Sunil Huffmann Iogurte de Morango Apenas Almoço 4
2 2 Barclay Lynn Batata Frita Apenas Almoço 5
3 3 Jayendra Lyne <NA> Café da Manhã e Almoço 7
4 4 Leon Rossini Anchovas Apenas Almoço NA
5 5 Chidiegwu Dunkel Pizza Café da Manhã e Almoço cinco
6 6 Güvenç Attila Sorvete Apenas Almoço 6
-
plano_de_refeicao: variável categórica (conjunto conhecido de valores possíveis) - deveria ser representada como fator
forcats::as_factor()
Organizando os tipos de variáveis
estudantes <- read_csv("./data/estudantes.csv",
na = c("N/A", "")) |>
clean_names() |>
mutate(
plano_de_refeicao = as_factor(plano_de_refeicao)
)
estudantes# A tibble: 6 × 5
id_do_aluno nome_completo comida_favorita plano_de_refeicao idade
<dbl> <chr> <chr> <fct> <chr>
1 1 Sunil Huffmann Iogurte de Morango Apenas Almoço 4
2 2 Barclay Lynn Batata Frita Apenas Almoço 5
3 3 Jayendra Lyne <NA> Café da Manhã e Almoço 7
4 4 Leon Rossini Anchovas Apenas Almoço NA
5 5 Chidiegwu Dunkel Pizza Café da Manhã e Almoço cinco
6 6 Güvenç Attila Sorvete Apenas Almoço 6
Organizando os tipos de variáveis
estudantes# A tibble: 6 × 5
id_do_aluno nome_completo comida_favorita plano_de_refeicao idade
<dbl> <chr> <chr> <fct> <chr>
1 1 Sunil Huffmann Iogurte de Morango Apenas Almoço 4
2 2 Barclay Lynn Batata Frita Apenas Almoço 5
3 3 Jayendra Lyne <NA> Café da Manhã e Almoço 7
4 4 Leon Rossini Anchovas Apenas Almoço NA
5 5 Chidiegwu Dunkel Pizza Café da Manhã e Almoço cinco
6 6 Güvenç Attila Sorvete Apenas Almoço 6
-
idade: variável numérica, mas está como caractere -
cincoao invés de5
Organizando os tipos de variáveis
estudantes <- read_csv("./data/estudantes.csv",
na = c("N/A", "")) |>
clean_names() |>
mutate(
plano_de_refeicao = as_factor(plano_de_refeicao),
idade = parse_number(if_else(idade == "cinco", "5",idade))
)
estudantes# A tibble: 6 × 5
id_do_aluno nome_completo comida_favorita plano_de_refeicao idade
<dbl> <chr> <chr> <fct> <dbl>
1 1 Sunil Huffmann Iogurte de Morango Apenas Almoço 4
2 2 Barclay Lynn Batata Frita Apenas Almoço 5
3 3 Jayendra Lyne <NA> Café da Manhã e Almoço 7
4 4 Leon Rossini Anchovas Apenas Almoço NA
5 5 Chidiegwu Dunkel Pizza Café da Manhã e Almoço 5
6 6 Güvenç Attila Sorvete Apenas Almoço 6
parse_number()
- Analisa o primeiro número encontrado, descartando todos os caracteres não numéricos antes do primeiro número e todos os caracteres após o primeiro número
if_else()
- Argumentos:
condition,true,false - if_else(idade == “cinco”, “5”, idade)
-
condition: idade == “cinco” -
true: “5” -
false: idade
-
Exercícios
Use o link a seguir para baixar um banco de dados no formato CSV e salvá-lo no objeto demograficos. O dados estão separados por ,
"https://tinyurl.com/ddmge99"Resposta
demograficos <- read_csv("https://tinyurl.com/ddmge99")Exercícios
Agora, faça alterações no banco de modo que o trabalho em análises posteriores seja facilitado
Resposta - parte 1: dando uma olhada nos dados
demograficos# A tibble: 5 × 5
ID `Nome Completo` Idade Sexo `Estado Civil`
<dbl> <chr> <chr> <chr> <chr>
1 1 João da Silva trinta e dois Masculino Casado
2 2 Maria de Souza 27 Feminino Solteira
3 3 José Pereira 45 Masculino 999
4 4 Ana Santos 36 Feminino Casada
5 5 Pedro Almeida 41 Masculino Solteiro
Resposta - parte 2: corrigindo valores ausentes
demograficos# A tibble: 5 × 5
ID `Nome Completo` Idade Sexo `Estado Civil`
<dbl> <chr> <chr> <chr> <chr>
1 1 João da Silva trinta e dois Masculino Casado
2 2 Maria de Souza 27 Feminino Solteira
3 3 José Pereira 45 Masculino 999
4 4 Ana Santos 36 Feminino Casada
5 5 Pedro Almeida 41 Masculino Solteiro
-
999é uma codificação comum para valores ausentes
Resposta - parte 2: corrigindo valores ausentes
demograficos# A tibble: 5 × 5
ID `Nome Completo` Idade Sexo `Estado Civil`
<dbl> <chr> <chr> <chr> <chr>
1 1 João da Silva trinta e dois Masculino Casado
2 2 Maria de Souza 27 Feminino Solteira
3 3 José Pereira 45 Masculino <NA>
4 4 Ana Santos 36 Feminino Casada
5 5 Pedro Almeida 41 Masculino Solteiro
Resposta - parte 3: corrigindo o nome das variáveis
library(janitor)
demograficos <- read_csv("https://tinyurl.com/ddmge99",
na = c("", "999")) |>
clean_names()demograficos# A tibble: 5 × 5
id nome_completo idade sexo estado_civil
<dbl> <chr> <chr> <chr> <chr>
1 1 João da Silva trinta e dois Masculino Casado
2 2 Maria de Souza 27 Feminino Solteira
3 3 José Pereira 45 Masculino <NA>
4 4 Ana Santos 36 Feminino Casada
5 5 Pedro Almeida 41 Masculino Solteiro
Resposta - parte 4: corrigindo as variáveis categóricas
-
sexoeestado_civil: variáveis categóricas (conjunto conhecido de valores possíveis) - deveriam ser representada como fator
forcats::as_factor()
demograficos# A tibble: 5 × 5
id nome_completo idade sexo estado_civil
<dbl> <chr> <chr> <fct> <fct>
1 1 João da Silva trinta e dois Masculino Casado
2 2 Maria de Souza 27 Feminino Solteira
3 3 José Pereira 45 Masculino <NA>
4 4 Ana Santos 36 Feminino Casada
5 5 Pedro Almeida 41 Masculino Solteiro
Reposta - parte 5: corrigindo a variável numérica
-
idade:trinta e dois
demograficos <- read_csv("https://tinyurl.com/ddmge99",
na = c("", "999")) |>
clean_names() |>
mutate(
sexo = as_factor(sexo),
estado_civil = as_factor(estado_civil),
idade = parse_number(if_else(idade == "trinta e dois", "32", idade))
)demograficos# A tibble: 5 × 5
id nome_completo idade sexo estado_civil
<dbl> <chr> <dbl> <fct> <fct>
1 1 João da Silva 32 Masculino Casado
2 2 Maria de Souza 27 Feminino Solteira
3 3 José Pereira 45 Masculino <NA>
4 4 Ana Santos 36 Feminino Casada
5 5 Pedro Almeida 41 Masculino Solteiro
E se os decimais forem separados por vírgula?
- CSV: valores separados por vírgulas
- Brasil: casas decimais são separadas por vírgula
- 2,4 e 5,7 e 6,7
a,b,c
2,4,5,7,6,7
E se os decimais forem separados por vírgula?
-
read_csv()não vai ler o arquivo corretamente
# A tibble: 1 × 4
a b c ...4
<dbl> <dbl> <dbl> <dbl>
1 2 4 5 767
# A tibble: 1 × 3
a b c
<dbl> <dbl> <dbl>
1 2.4 5.7 6.7
read_csv2()
- Decimais separados por
,: valores separados por;- 2,4;5,7;6,7
-
read_csv2(): lê arquivo separados por; - academia.csv
ID;Nome;Idade;Sexo;Altura;Peso;Cidade
1;João;25;Masculino;1,75;70,25;Sobral
2;Maria;32;Feminino;1,63;58,50;Fortaleza
3;Pedro;45;Masculino;1,80;85,75;Pacajus
4;Ana;28;Feminino;1,68;60,00;Fortaleza
5;Carlos;33;Masculino;1,82;77,50;Sobral
read_csv2()
| ID | Nome | Idade | Sexo | Altura | Peso | Cidade |
|---|---|---|---|---|---|---|
| 1 | João | 25 | Masculino | 1.75 | 70.25 | Sobral |
| 2 | Maria | 32 | Feminino | 1.63 | 58.50 | Fortaleza |
| 3 | Pedro | 45 | Masculino | 1.80 | 85.75 | Pacajus |
| 4 | Ana | 28 | Feminino | 1.68 | 60.00 | Fortaleza |
| 5 | Carlos | 33 | Masculino | 1.82 | 77.50 | Sobral |
read_csv2()
academia <- read_csv2("./data/academia.csv")
academia# A tibble: 5 × 7
ID Nome Idade Sexo Altura Peso Cidade
<dbl> <chr> <dbl> <chr> <dbl> <dbl> <chr>
1 1 João 25 Masculino 1.75 70.2 Sobral
2 2 Maria 32 Feminino 1.63 58.5 Fortaleza
3 3 Pedro 45 Masculino 1.8 85.8 Pacajus
4 4 Ana 28 Feminino 1.68 60 Fortaleza
5 5 Carlos 33 Masculino 1.82 77.5 Sobral
Outros argumentos
- read_csv() pode ler sequências de texto que você criou e formatou como um arquivo CSV
read_csv(
"a,b,c
1,2,3
4,5,6"
)# A tibble: 2 × 3
a b c
<dbl> <dbl> <dbl>
1 1 2 3
2 4 5 6
Outros argumentos
-
read_csv(): primeira linha para os nomes das colunas - Não é incomum que algumas linhas de metadados sejam incluídas na parte superior do arquivo
-
skip = n: pular as primeiras n linhas -
comment = "#": eliminar todas as linhas que começam, por exemplo, com “#”
skip = n
read_csv(
"A primeira linha de metadados
A segunda linha de metadados
x,y,z
1,2,3",
skip = 2
)# A tibble: 1 × 3
x y z
<dbl> <dbl> <dbl>
1 1 2 3
comment = "#"
read_csv(
"# Um comentário que eu quero pular
x,y,z
1,2,3",
comment = "#"
)# A tibble: 1 × 3
x y z
<dbl> <dbl> <dbl>
1 1 2 3
Outros argumentos
-
read_csv(): primeira linha para os nomes das colunas - Há casos em que os dados não tem nomes das colunas
-
col_names = F: não tratar a primeira linha como títulos e, em vez disso, rotulá-los sequencialmente de X1 a Xn
read_csv(
"1,2,3
4,5,6"
)# A tibble: 1 × 3
`1` `2` `3`
<dbl> <dbl> <dbl>
1 4 5 6
col_names = F
read_csv(
"1,2,3
4,5,6",
col_names = F
)# A tibble: 2 × 3
X1 X2 X3
<dbl> <dbl> <dbl>
1 1 2 3
2 4 5 6
col_names =
- é possível indicar o nome das colunas como um vetor de caracteres
n_max =
- é possível indicar o número máximo de linhas que se quer ler
- se a primeira linha indica os rótulos, ela não conta no número máximo
8.5 Exportando um arquivo
-
write_csv()- as informações do tipo de variável configuradas são perdidas
estudantes# A tibble: 6 × 5
id_do_aluno nome_completo comida_favorita plano_de_refeicao idade
<dbl> <chr> <chr> <fct> <dbl>
1 1 Sunil Huffmann Iogurte de Morango Apenas Almoço 4
2 2 Barclay Lynn Batata Frita Apenas Almoço 5
3 3 Jayendra Lyne <NA> Café da Manhã e Almoço 7
4 4 Leon Rossini Anchovas Apenas Almoço NA
5 5 Chidiegwu Dunkel Pizza Café da Manhã e Almoço 5
6 6 Güvenç Attila Sorvete Apenas Almoço 6
write_csv()
estudantes |>
write_csv("./data/estudantes_edit.csv")read_csv("./data/estudantes_edit.csv")# A tibble: 6 × 5
id_do_aluno nome_completo comida_favorita plano_de_refeicao idade
<dbl> <chr> <chr> <chr> <dbl>
1 1 Sunil Huffmann Iogurte de Morango Apenas Almoço 4
2 2 Barclay Lynn Batata Frita Apenas Almoço 5
3 3 Jayendra Lyne <NA> Café da Manhã e Almoço 7
4 4 Leon Rossini Anchovas Apenas Almoço NA
5 5 Chidiegwu Dunkel Pizza Café da Manhã e Almoço 5
6 6 Güvenç Attila Sorvete Apenas Almoço 6
Lendo arquivos do SPSS
read_sav()
estudantes_sav <- read_sav("https://tinyurl.com/estudansav")estudantes_sav# A tibble: 6 × 5
IDdoAluno NomeCompleto PlanodeRefeicao ComidaFavorita Idade
<dbl> <chr> <dbl+lbl> <dbl+lbl> <chr>
1 1 Sunil Huffmann 1 [Apenas Almoço] 3 [Iogurte de Mo… 4
2 2 Barclay Lynn 1 [Apenas Almoço] 2 [Batata Frita] 5
3 3 Jayendra Lyne 2 [Café da Manhã e Almoço] NA 7
4 4 Leon Rossini 1 [Apenas Almoço] 1 [Anchovas] NA
5 5 Chidiegwu Dunkel 2 [Café da Manhã e Almoço] 5 [Pizza] cinco
6 6 Güvenç Attila 1 [Apenas Almoço] 6 [Sorvete] 6
Lendo arquivos do excel
read_excel()
- Por padrão, vai ler a primeira planilha
read_excel("./data/exemplo_excel.xlsx")# A tibble: 5 × 7
ID Nome Idade Sexo Altura Peso Cidade
<dbl> <chr> <dbl> <chr> <dbl> <dbl> <chr>
1 1 João 25 Masculino 1.75 70.2 Sobral
2 2 Maria 32 Feminino 1.63 58.5 Fortaleza
3 3 Pedro 45 Masculino 1.8 85.8 Pacajus
4 4 Ana 28 Feminino 1.68 60 Fortaleza
5 5 Carlos 33 Masculino 1.82 77.5 Sobral
Obtendo os nomes das planilhas
- Liste os nomes das planilhas com
excel_sheets()
excel_sheets("./data/exemplo_excel.xlsx")[1] "academia" "demograficos" "estudantes"
Lendo uma planilha selecionada
-
sheet =: seleciona a planilha desejada
read_excel("./data/exemplo_excel.xlsx",
sheet = "estudantes")# A tibble: 6 × 5
`ID do Aluno` `Nome Completo` `Comida Favorita` `Plano de Refeição` Idade
<dbl> <chr> <chr> <chr> <chr>
1 1 Sunil Huffmann Iogurte de Morango Apenas Almoço 4
2 2 Barclay Lynn Batata Frita Apenas Almoço 5
3 3 Jayendra Lyne N/A Café da Manhã e Almoço 7
4 4 Leon Rossini Anchovas Apenas Almoço NA
5 5 Chidiegwu Dunkel Pizza Café da Manhã e Almoço cinco
6 6 Güvenç Attila Sorvete Apenas Almoço 6
Compartilhar conhecimento sempre!
O código e as imagens utilizados para a construção desse slide estão disponíveis no link a seguir:

