Conteúdo do Módulo
1 - Lendo o conjunto de dados externo em "data.frame" do R
read.csv2, <-, identificadores de variáveis
2 - Lendo um conjunto de dados em arquivo no seu computador
file.choose
3 - Verificação da integridade dos dados (leitura foi ok?)
dim, names, uso de [] em nomes de data.frames
4 - Tipos de valores e criação de vetores de interesse
numeric, character, logic, NA, Inf, NaN, número:número, rep, seq
5 - Modificando nomes das variaveis no data.frame
names(nome) <- c("nome1","nome2")
6 - Modificando os nomes das categorias de variáveis qualitativas
levels(nome) <- c("nome1","nome2")
7 - Visualização de variáveis e reordenação de categorias em variáveis qualitativas
factor(nomedavariável, levels(nomedavariavel)[vetor])
8 - Alteração de valores de variáveis no data.frame
nome<-valor
9 - Criando novas variáveis a partir das existentes
10 - Salvando o data.frame modificado em arquivo no seu computador
write.table, getwd, setwd
Para ler o arquivo com o conjunto de dados (codificado no formato csv BR) de um site externo no “data.frame” do R que denominamos “alunos”, use
alunos<-read.csv2('http://ihbs.com.br/html/esalq2012.csv')
Note como definir o “caminho” de forma apropriada. Após a execução bem sucedida dessa linha, o conjunto de dados estará “contido” no objeto “alunos”, um “data.frame”.
o símbolo "<-" indica: guarde o objeto definido pelo
conteúdo da expressão da direita (no caso um "data.frame")
em uma região da memória do computador indentificada pelo
"identificador" especificado à esquerda ("alunos")
regras para identificadores: não exceda 20 caracteres
use só letras, números e
pontos, evite acentos
nota: isso é só uma sugestão,
há mais flexibilidade no R
ex: altura, peso.ind, pesoInd, renda.pessoal2, rendaPess
Se o arquivo csv (BR) estiver no seu próprio computador, pode utilizar
caminho<-file.choose() #seleção de arquivo via menus
alunos<-read.csv2(caminho)
A função “file.choose” abre um menú que possibilita a escolha de um caminho que define um arquivo no seu computador. Esse caminho é posteriormente passado para a função “read.csv2” que lê o arquivo, através da variável “caminho”, como fizemos parte 1.
É sempre oportuno verificar se o arquivo foi lido corretamente. Pode ter havido algum problema na conversão do arquivo original para o formato csv, ou problemas na opção de codificação. Algumas funções do R facilitam a verificação de potenciais problemas.
dim(alunos) ## mostra número de linhas e colunas
## [1] 56 14
names(alunos) ## mostra nomes das variáveis no data.frame
## [1] "sexo" "curso" "ingresso" "idade" "cidade" "reprov"
## [7] "anospub" "peso" "altura" "time" "satisf" "reprmat"
## [13] "pg" "carreira"
alunos[1:4,1:5] ## mostra linhas 1 a 4 e colunas 1 a 5 do data.frame
## sexo curso ingresso idade cidade
## 1 M Econ 2010 20 Outra cidade do interior de Sao Paulo
## 2 M Econ 2010 20 Outra cidade do interior de Sao Paulo
## 3 F Econ 2010 22 Outra cidade do interior de Sao Paulo
## 4 M Econ 2009 22 Outra cidade do interior de Sao Paulo
Antes de prosseguirmos é importante explicar que o R considera 3 tipos de valores principais: numérico (“numeric”), que pode ser inteiro ou real, texto (“character”), lógic (“logic”). Variáveis que representam vetores contém coleções ordenadas de valores de um só tipo (listas, um outro tipo de objeto do R pode conter tipos diferentes). Textos envolvidos com aspas são frequentemente denominados “strings” na linguagem usada em computação.
Os vetores podem ser lidos externamente, em data.frames, ou definidos através do comando “c”, de “concatenate” como ilustrado a seguir:
x<-c(2,4.2,5,4.88) ## criando um vetor tipo numeric
x
## [1] 2.00 4.20 5.00 4.88
x<-c("a","carro","c2","22") ## criando um vetor com texto (tipo character)
x
## [1] "a" "carro" "c2" "22"
x<-c(FALSE, TRUE, TRUE) ## criando um vetor com valores lógicos (TRUE e FALSE)
x
## [1] FALSE TRUE TRUE
O R também reconhece 3 valores especiais para indicar situações que ocorrem na prática da análise de dados, que são codificados com os símbolos * NA - um valor que indica que o valor é inexistente (not available) * Inf - infinito (resultado de uma operação como 1/0) * NaN - resultado indefinido (resultado de uma operação como log(-1))
Alguns exemplos de operações em vetores envolvendo esses valores
x<-c(NA, 9, 16, -1)
x
## [1] NA 9 16 -1
sqrt(x) # raiz
## Warning in sqrt(x): NaNs produzidos
## [1] NA 3 4 NaN
x/0
## [1] NA Inf Inf -Inf
No caso da operação sqrt(x), o R também produziu um aviso (warning), para alertar o usuário sobre o resultado da operação que produziu um NaN.
Em muitas situações de análise, é necessário recorrer ao uso de certos vetores especiais realização de operações.
1:10 ## situação bem usual
## [1] 1 2 3 4 5 6 7 8 9 10
-2:4 ## sequência iniciando com número negativo
## [1] -2 -1 0 1 2 3 4
10:1 ## sequência descrescente
## [1] 10 9 8 7 6 5 4 3 2 1
rep(1,5)
## [1] 1 1 1 1 1
rep("gato",3) ## pode ser um vetor de "strings"
## [1] "gato" "gato" "gato"
seq(1,2,0.2)
## [1] 1.0 1.2 1.4 1.6 1.8 2.0
seq(-2,2,0.5)
## [1] -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0
seq(3,2,-0.1)
## [1] 3.0 2.9 2.8 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0
Vamos modificar os nomes das variáveis para nomes mais compactos para facilitar o manuseio das variáveis nas análises. Além disso, como os nomes são usados como rótulos para identificação das variáveis nos resultados (tabelas, gráficos, etc.), nomes muito longos podem ser inconvenientes.
names(alunos) ## mostra nomes das variáveis no data.frame, na ordem
## [1] "sexo" "curso" "ingresso" "idade" "cidade" "reprov"
## [7] "anospub" "peso" "altura" "time" "satisf" "reprmat"
## [13] "pg" "carreira"
Vamos agora fazer a alteração:
names(alunos)<-c("sex","cur","ing","ida","cid","rep","pub","pes","alt","tim","sat","rmat","pg","car")
names(alunos) ## mostrando os novos nomes
## [1] "sex" "cur" "ing" "ida" "cid" "rep" "pub" "pes" "alt" "tim"
## [11] "sat" "rmat" "pg" "car"
A função "c" do R cria um vetor, concatenando elementos separados por vírgulas.
No caso, criou-se um vetor de textos ou "strings" na linguagem usada em computação.
Cada "string" substituirá o "string" original que definia o nome da variável,
na ordem mostrada quando da primeira execução de names(alunos)
Da mesma forma que fizemos para os nomes das variáveis, podemos também modificar os nomes ou identificadores que caracterizam as“categorias” ou “níveis” de variáveis qualitativas (também chamadas de fatores em estatística).
Para acesso a cada variável, precedemos o nome da variável com o nome do data.frame ao qual ela pertence, separando os dois nomes com o símbolo “$”
levels(alunos$sex) ## mostra os níveis ou categorias da variável sex no data.frame alunos
## [1] "F" "M"
Para alterar os nomes dessas categorias, que indicam o sexo do aluno, para “f” e “m”, letras minúsculas, use
levels(alunos$sex)<-c("f","m") ## mostra os níveis ou categorias da variável sex no data.frame alunos
levels(alunos$sex) ## mostrando os novos nomes, já alterados na variável
## [1] "f" "m"
Vamos agora proceder a alteração dos níveis de todas as variáveis qualitativas para torná-los mais compactos:
levels(alunos$cur) ## Curso (a-agronomia e-economia)?
## [1] "Agro" "Econ"
levels(alunos$cur)<-c("a","e")
levels(alunos$tim) ## Time que torce?
## [1] "Corinthians" "Nenhum time" "Outro time" "Palmeiras" "Santos"
## [6] "Sao Paulo"
levels(alunos$tim)<-c("c","n","o","p","s","t")
levels(alunos$cid) ## Cidade onde nasceu?
## [1] "Cidade no exterior"
## [2] "Outra cidade do Brasil fora do Estado de SP"
## [3] "Outra cidade do interior de Sao Paulo"
## [4] "Piracicaba"
## [5] "Sao Paulo, Capital"
levels(alunos$cid)<-c("ext","fsp","isp","pir","csp")
levels(alunos$rmat) ## Teve reprovação em matemática?
## [1] "Nao" "Sim"
levels(alunos$rmat)<-c("n","s")
levels(alunos$pg) ## Deseja fazer pós-graduação?
## [1] "Me interesso pela pos graduacao em economia aplicada na ESALQ"
## [2] "Me interesso por pos graduacao em outras areas"
## [3] "Nao me interesso no momento"
## [4] "Nao sei ainda"
levels(alunos$pg)<-c("pgea","pgou","nint","nsei")
levels(alunos$car) ## Qual carreira deseja seguir?
## [1] "Nao sei ainda"
## [2] "Ser empresario"
## [3] "Ser professor ou pesquisador (universidade)"
## [4] "Trabalhar em empresa privada"
## [5] "Trabalhar em empresa pública (concurso público)"
levels(alunos$car)<-c("nsei","empr","pesq","priv","publ")
Para visualizar todas as modificações realizadas, vamos ver as 10 primeiras linhas do nosso data.frame “alunos” usando:
alunos[1:10,]
## sex cur ing ida cid rep pub pes alt tim sat rmat pg car
## 1 m e 2010 20 isp 1 0 57 172 t 2 s nsei nsei
## 2 m e 2010 20 isp 4 0 78 175 p 2 s nint priv
## 3 f e 2010 22 isp 2 5 59 170 s 2 s pgou priv
## 4 m e 2009 22 isp 6 0 78 179 o 2 s nint nsei
## 5 m e 2010 22 isp 3 4 80 180 t 5 s nsei priv
## 6 m e 2011 21 isp 0 0 66 174 c 3 n nsei nsei
## 7 m e 2011 19 pir 0 0 85 172 p 4 n nsei priv
## 8 f e 2011 19 isp 0 0 54 162 s 4 n nsei priv
## 9 m e 2011 20 isp 0 4 63 175 p 3 n pgou publ
## 10 f e 2010 21 pir 3 0 62 175 p 3 s nint priv
names(alunos) #mostrando os nomes das variáveis no data.frame
## [1] "sex" "cur" "ing" "ida" "cid" "rep" "pub" "pes" "alt" "tim"
## [11] "sat" "rmat" "pg" "car"
Se o número de observações é relativamente pequeno podemos observar diretamente os valores da variável, como por exemplo o peso em kg (variável pes) simplesmente indicando o nome da variável, precedido do nome do data.frame, separado por um “$”
alunos$pes
## [1] 57.0 78.0 59.0 78.0 80.0 66.0 85.0 54.0 63.0 62.0 59.0
## [12] 56.0 80.0 60.0 66.0 73.0 73.0 98.0 69.0 65.0 87.0 64.0
## [23] 52.5 62.0 55.0 75.0 41.0 46.0 53.0 62.0 72.0 67.5 52.0
## [34] 52.0 62.0 100.0 75.0 60.5 77.0 69.5 54.0 115.0 74.0 65.0
## [45] 66.0 85.0 110.0 66.0 55.5 89.7 75.0 54.0 80.0 67.0 65.0
## [56] 68.0
Para uma variável quantitativa como o peso (alunos$pes), são apresentados os valores dessa variável. Para qualquer variável, numa listagem, no início de cada linha é mostrado o número da observação correspondente ao próximo valor da linha.
Para observar o sexo (variavel sex) de cada observação, usamos:
alunos$sex
## [1] m m f m m m m f m f f f m f f m m m m m m m f f f m f f f m m m f f f
## [36] m f f m m f m m m f m m m m m f f m m m m
## Levels: f m
Note que para uma uma variável qualitativa (também chamada categórica ou fator), também são apresentados, ao final da listagem, todas as categorias ou níveis encontrados, em ordem alfabética. Essa ordem será utilizada em todas as análises.
Se quisermos alterar a ordem de apresentação das categorias da variável qualitativa alunos$sex, fazendo a categoria “m” ser apresentada anteriormente a “f” podemos utilizar:
alunos$sex<-factor(alunos$sex,levels(alunos$sex)[c(2,1)]) # reordenação de níveis
O vetor mostra o número de ordem da categoria atual que deve ser posicionada em cada posição do vetor. No caso “m” ocupava a posição, e como 2 foi posto na primeira posição, essa é nova posição que deve ocupar. Verificaremos que a ordem dos níveis ou categorias foi de fato alterada:
alunos$sex ## verificando se a ordem dos níveis foi alterada
## [1] m m f m m m m f m f f f m f f m m m m m m m f f f m f f f m m m f f f
## [36] m f f m m f m m m f m m m m m f f m m m m
## Levels: m f
Podemos facilmente modificar valores de variáveis. Para alterar o valor da quarta observação da variável alunos$alt use para o valor 180 (originalmente estava 179) use
alunos$alt[4]<-180
Para alterar vários valores simultaneamente (no caso os valores das observações 4, 7 e 8):
alunos$alt[c(4,7,8)]<-c(180,175,160)
Para verificar a substituição realizada
alunos[1:10,]
## sex cur ing ida cid rep pub pes alt tim sat rmat pg car
## 1 m e 2010 20 isp 1 0 57 172 t 2 s nsei nsei
## 2 m e 2010 20 isp 4 0 78 175 p 2 s nint priv
## 3 f e 2010 22 isp 2 5 59 170 s 2 s pgou priv
## 4 m e 2009 22 isp 6 0 78 180 o 2 s nint nsei
## 5 m e 2010 22 isp 3 4 80 180 t 5 s nsei priv
## 6 m e 2011 21 isp 0 0 66 174 c 3 n nsei nsei
## 7 m e 2011 19 pir 0 0 85 175 p 4 n nsei priv
## 8 f e 2011 19 isp 0 0 54 160 s 4 n nsei priv
## 9 m e 2011 20 isp 0 4 63 175 p 3 n pgou publ
## 10 f e 2010 21 pir 3 0 62 175 p 3 s nint priv
Vamos retornar os valores originais, usando:
alunos$alt[c(4,7,8)]<-c(179,172,162)
Para verificar a alteração (mostrando as 10 primeiras linhas)
alunos[1:10,]
## sex cur ing ida cid rep pub pes alt tim sat rmat pg car
## 1 m e 2010 20 isp 1 0 57 172 t 2 s nsei nsei
## 2 m e 2010 20 isp 4 0 78 175 p 2 s nint priv
## 3 f e 2010 22 isp 2 5 59 170 s 2 s pgou priv
## 4 m e 2009 22 isp 6 0 78 179 o 2 s nint nsei
## 5 m e 2010 22 isp 3 4 80 180 t 5 s nsei priv
## 6 m e 2011 21 isp 0 0 66 174 c 3 n nsei nsei
## 7 m e 2011 19 pir 0 0 85 172 p 4 n nsei priv
## 8 f e 2011 19 isp 0 0 54 162 s 4 n nsei priv
## 9 m e 2011 20 isp 0 4 63 175 p 3 n pgou publ
## 10 f e 2010 21 pir 3 0 62 175 p 3 s nint priv
É usual definirmos outras variáveis a partir das que já existem no data.frame, para as análises. Suponha que deseja criar, para cada observação, o valor do índice de massa corporal, que chamaremos de “imc”. Ele é definido como peso em kg dividido pela altura em m ao quadrado. Como a altura está medida em centimetros, podemos usar:
alunos$imc<-alunos$pes/(alunos$alt/100)^2
Podemos verificar que a nova variável foi de fato incorporada ao data.frame, usando:
names(alunos)
## [1] "sex" "cur" "ing" "ida" "cid" "rep" "pub" "pes" "alt" "tim"
## [11] "sat" "rmat" "pg" "car" "imc"
alunos[1:10,]
## sex cur ing ida cid rep pub pes alt tim sat rmat pg car imc
## 1 m e 2010 20 isp 1 0 57 172 t 2 s nsei nsei 19.26717
## 2 m e 2010 20 isp 4 0 78 175 p 2 s nint priv 25.46939
## 3 f e 2010 22 isp 2 5 59 170 s 2 s pgou priv 20.41522
## 4 m e 2009 22 isp 6 0 78 179 o 2 s nint nsei 24.34381
## 5 m e 2010 22 isp 3 4 80 180 t 5 s nsei priv 24.69136
## 6 m e 2011 21 isp 0 0 66 174 c 3 n nsei nsei 21.79945
## 7 m e 2011 19 pir 0 0 85 172 p 4 n nsei priv 28.73175
## 8 f e 2011 19 isp 0 0 54 162 s 4 n nsei priv 20.57613
## 9 m e 2011 20 isp 0 4 63 175 p 3 n pgou publ 20.57143
## 10 f e 2010 21 pir 3 0 62 175 p 3 s nint priv 20.24490
Se quiser salvar o data.frame alunos em arquivo, já com as modificações no seu computador, use
write.table(alunos,"esalq2012mod.csv",sep=";",dec=",",row.names=FALSE)
O data.frame alunos será salvo no arquivo “esalq2012mod.csv”, com as opções corretas que definem um arquivo csv no formato BR desejado: “;” separando valores, “,” separando decimais, com nomes das variáveis na primeira linha do arquivo, e sem nomes identificando linhas.
Onde será salvo o arquivo? Se o caminho não for especificado junto com o nome, o arquivo será salvo no caminho padrão definido na instalação do R. Como saber esse caminho?
getwd() ## mostrará o caminho ("path") padrão onde o R lerá ou salvará arquivos / dados
## [1] "C:/caminhodefinido"
Esse resultado mostraria que o caminho padrão é “C:/caminhodefinido”. No seu caso poderá obter um valor diferente, definido durante a instalação e/ou configuração do R.
Se quiser alterar esse caminho para um caminho “c:/caminhodesejado” use
setwd("c:/caminhodesejado") ## defina o caminho desejado (mude a letra do drive se quiser)
Após a execução dessa última linha o R passará a usar “c:/caminhodesejado” como o caminho padrão, para ler e salvar arquivos de comandos e dados, caso o caminho não seja especificado no nome do arquivo.