1. Prof. Dr. Roberto Dantas de Pinho, roberto.pinho@mct.gov.br
Este curso tomou como base material dos profs.
Dr. Paulo Justiniano Ribeiro Jr (UFPR) e
Dr. Cosme Marcelo Furtado Passos da Silva (FIOCRUZ)
1
2. Um primeira Salvando seu
sessão com o R trabalho
Objetos Manipulando
Entrada de dados dados
Agora que temos Somas e
os dados... agregações
Algumas análises Regressão linear
Filtragem e seleção E muitas outras coisas
ao longo do caminho
2
3. Você pode usar o R para avaliar algumas
expressões aritméticas simples. Digite:
1 + 2 + 3
2 + 3 * 4
3/2 + 1
4 * 3**3
O R é uma ambiente e uma linguagem
6
4. O ambiente R permite que você envie
comandos e veja seus resultados
imediatamente
A linguagem R é composta pelo conjunto de
regras e funções disponíveis que podem ser
executados no ambiente R.
Você pode juntar sequências de comandos
em scripts para uso posterior
7
5. Um série de funções estão disponíveis. Alguns
exemplos simples:
sqrt(2) 2
abs(-10) 10
sin(pi) sin( )
pi é uma constante do R, seu valor já é definido
8
6. Resultados, dados de entrada , tabelas, etc
são armazenados no R em Objetos
Objetos possuem um nome, conteúdo , um
tipo e são armazenados na memória. Ex.
Criar o objeto “x” contendo o número 10:
x <- 10
Exibir o conteúdo de x:
x
No R, abc é diferente de ABC
9
7. Experimente:
X <- sqrt(2)
<- e = são equivalentes.
Y = sin(pi)
Z = sqrt(X+Y)
Nos exemplos acima, X, Y e Z armazenam os
resultados das respectivas operações
No R, sempre existem muitas
formas de fazer a mesma coisa.
Vamos focar sempre em uma.
10
8. Qual o valor de C ao final da sequência de
comandos abaixo?
A = 1
B = 2
C = A + B
A = 5
B = 5
Por quê?
11
13. Objeto que armazena múltiplos dados de um
único tipo
A função c( ) (“c” de concatenar ou de
conjunto) permite agrupar valores para
formar um vetor:
X = c(1,3,6)
Para acessar elementos do vetor:
X[1] X[3]
16
14. Operações aritméticas e funções podem ser
aplicadas a todo um vetor. Ex.
X = c(1,3,5)
Y = c(10,20,30)
X+Y
11 23 35
sum(X)
9
E X + 100 ?
101 103 105 pela Lei da reciclagem
17
15. Quando o tamanho pedido por uma operação
é diferente dos dados disponíveis, os dados
existentes são repetidos até completar o
necessário.
Como X tem 3 elementos, X+100 é o
mesmo que X + c(100,100,100)
18
23. “matriz” com várias dimensões. Ex. com 3 dim.:
ar1 <- array(1:24, dim = c(3, 4, 2))
, , 1
1ª matriz
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12 Para um array de 3 dimensões,
você pode entender a 3ª
, , 2 dimensão como uma coleção de
matrizes.
[,1] [,2] [,3] [,4]
[1,] 13 16 19 22
[2,] 14 17 20 23 2ª matriz
[3,] 15 18 21 24
26
24. Como trabalhar com coisas assim?
Ano Código do Órgão
UF Órgão Código da UO unidade orçamentária função subfunção programa ação
localizador descrição da ação valor P&D valor ACTC
Adm
direta e MODERNIZAÇÃO DO SISTEMA DE
2010 AC 1 indireta 1 Adm direta e indireta 19 121 2056 1548 PLANEJAMENTO E GESTÃO DA SDCT R$ - R$ 16.655,00
PROGRAMA DE COOPERAÇÃO TÉCNICA E
Adm FINANCEIRA COM INSTIT. NAC. INTERN.
direta e GOVERNAMENTAIS E NÃO
2010 AC 1 indireta 1 Adm direta e indireta 19 121 2056 1549 GOVERNAMENTAIS R$ - R$ 715.000,00
Adm
direta e MANUTENÇÃO DO GABINETE DO SECRETÁ
2010 AC 1 indireta 1 Adm direta e indireta 19 122 2009 2224 RIO R$ - R$ 27.732,11
Adm
direta e
2010 AC 1 indireta 1 Adm direta e indireta 19 122 2009 2227 DEPARTAMENTO DE GESTÃO INTERNA R$ - R$ 2.266.169,90
27
25. colnames(d) [1] "letra" "num" "valor"
Cada coluna tem o seu tipo
d = data.frame(letters[1:4], 1:4, 10.5)
letters.1.4. X1.4 X10.5
1 a 1 10.5 Na maior parte do
2 b 2 10.5 tempo usaremos
3 c 3 10.5 data.frames
4 d 4 10.5
Podemos mudar o nome das colunas:
colnames(d) = c("letra","num", "valor")
colnames(d)
[1] "letra" "num" "valor“
d$valor # seleciona a coluna “valor” de d
28
29. require(XLConnect)
Carrega o pacote XLConnect
Pacotes são conjuntos de funções e dados
que adicionam funcionalidades ao R.
Se o pacote não estiver instalado:
setInternet2() #somente no windows
install.packages("XLConnect", dep=T)
32
30. Cria um objeto “wb” que aponta para o
arquivo excel:
wb <-
loadWorkbook(“AC_PDACTCaula.xls”)
33
31. Carrega os dados da primeira planilha (“aba”)
em um objeto chamado “plan1”
plan1 <- readWorksheet(wb, sheet = 1)
As funções no R identificam os parâmetros
As funções no R
identificam os
pela ordem parâmetros pela
Ou utilizando o
nome do
ordem parâmetro
34
32. Mostra a estrutura do objeto criado:
str(plan1) str() funciona para qualquer
objeto do R. É muito útil.
Mostra os dados carregados em uma janela:
View(plan1)
No RStudio, você pode clicar em
um objeto na lista de objetos
35
33. args(readWorksheet) #mostra parâmetros
function (
object, #o workbook “wb”
sheet, #número ou nome da
“aba”/planilha
startRow, #linha inicial da importação
startCol, #col. inicial da importação
endRow, #linha final da importação
endCol, #col. final da importação
header # T ou F: usar primeira
linha para dar nome às
colunas )
36
34. Comma-separated values: valores separados por
vírgula
Formato de arquivo muito comum para troca de
dados
;
São comuns outros separadores: <tab> <espaço>
Exemplo:
uf ano valido somaactc somapd
AC 2009 1 34296430.67 3630841.04
AC 2010 1 29397712.04 3579715.12
AL 2009 1 12650160.51 8903714.41
37
35. Exemplo:
uf ano valido somaactc somapd
AC 2009 1 34296430,67 3630841,04
AC 2010 1 29397712,04 3579715,12
AL 2009 1 12650160,51 8903714,41
Para ler este arquivo:
d = read.csv(file="AgregaUF20110930_b.txt",
header=T, # usa primeira linha como cabeçalho
sep="t", # separador de valores é <tab>
dec="," # separador decimal é vírgula
)
38
38. Como fazer a soma de uma coluna de um
data.frame?
sum(data.frame$coluna)
sum(d$somapd)
[1] NA
41
39. NA Not Available
denota dados faltantes. Note que deve utilizar
maiúsculas.
NaN Not a Number
denota um valor que não é representável por um
número.
Inf e -Inf
mais ou menos infinito.
Tente: c(-1,0,1)/0
42
49. Quem ganha acima da mediana
acimamediana = milsa[ salario >
median(salario), ]
Quais são os casados com nível superior?
casadoEsuperior = milsa[
civil==“casado” & instrucao ==
“Superior”, ]
E: ambas as condições
devem ser verdadeiras
52
50. Quais são os casados ou quem tem nível
superior?
casadoOUsuperior = milsa[
civil==“casado” | instrucao ==
“Superior”, ]
OU: pelo menos uma
das condições deve ser
verdadeira
53
51. NÃO
milsaLimpo=milsa[!is.na(salario), ]
Em português:
Nova tabela milsaLimpo
É igual =
Tabela antiga milsa
Selecione [
Linhas
Salário não é NA ! is.na(salario)
e todas as colunas , ]
54
52. QUANTOS são os casados?
sum(civil==“casado”)
ou
table(civil)["casado"]
QUANTOS são os casados e tem nível superior?
sum(civil==“casado” & instrucao
== “Superior” )
table(civil,instrucao)["casado",
"Superior"]
55
53. milsaNovo é igual a milsa, sem as
linhas 1,2 e 5 e sem as colunas 1 e 8:
milsaNovo =
milsa[-c(1,2,5), -c(1,8)]
56
54. Quais linhas atendem à
condição
sup = which(instrucao=="Superior“)
[1] 19 24 31 33 34 36
Posso usar depois:
mean(milsa[sup,”salario”])
Média salarial dos que tem nível superior
vantagem: não cria cópia!!
57
55. Uma amostra aleatória de 10 elementos
de milsa:
amostra =
sample(x=nrow(milsa),size=10)
[1] 12 29 1 3 17 14 26 33 20
31
Média salarial da amostra:
mean(milsa[amostra,”salario”])
58
56. Em ordem de número de filhos:
milsa[order(filhos),]
Decrescente:
milsa[order(filhos, decreasing=T),]
Em ordem de número de filhos e depois por idade:
milsa[order(filhos,ano),]
Ver os 10 mais novos:
head(milsa[order(ano),], 10)
Ver os 10 mais velhos:
tail(milsa[order(ano),], 10)
59
57. Apagando um objeto
rm(milsaNovo) ls() : lista de
Apagando tudo objetos correntes
rm(list = ls())
60
58. Objetos do tipo lista são coleções que podem conter
objetos de tipos diferentes.
lis = list(A=1:10, B=“Texto”,
C = matrix(1:9,ncol=3)
São muito utilizadas na passagem de parâmetros para
funções ou nos resultados de funções.
lis[1:2]
uma lista com os dois primeiros itens de lis (A e B)
lis[[1]]:
objeto armazenado na primeira posição da lista ( o conteúdo
de A). O mesmo que lis$A
61
59. Para salvar todos os objetos:
save.image(“arquivo.RData”)
Para salvar alguns objetos:
save( x, y,
file=“arquivo.RData”)
Carregando:
load(“arquivo.RData“)
Vários “load”: os objetos com
nomes distintos se acumulam
62
60. Salvar um script “.R” que reproduza os passos
feitos.
Vantagem: Além de servir de documentação da
criação da base, incorpora alterações na base, se
houver.
Modelo híbrido:
Resultados intermediários que requerem muito tempo
processamento pode ser salvos em imagem. Ex.
agregação de dados de empregados por empresa
63
61. Criando uma coluna em um data.frame:
milsa$idade =
milsa$ano + milsa$mes/12
64
68. Registros com correspondência :
merge(x=milsa,
y=tabInst,by.x="instrucao", by.y="desc“,
all=F)
Todos os registros da tabela X:
merge(x=milsa,
y=tabInst,by.x="instrucao", by.y="desc",
all.x=T)
71
69. Todos os registros da tabela y:
merge(x=milsa,
y=tabInst,by.x="instrucao", by.y="desc",
all.y=T)
Todos os registros das tabela x e y:
merge(x=milsa,
y=tabInst,by.x="instrucao",
by.y="desc", all=T)
72
70. De texto para número
d.f$novaColuna = as.numeric(d.f$coluna)
De número para texto:
d.f$novaColuna=as.character(d.f$coluna)
De texto ou número para inteiro:
d.f$novaColuna = as.integer(d.f$coluna)
Inteiros economizam memória
73
71. Representação de variáveis qualitativas
Nominais
▪ “casado”, “solteiro”
Ordinais Fatores economizam memória
▪ “alto”, “baixo”
Economizam espaço de memória
Tratamento apropriado para este tipo de
variável pelas funções do R
74
73. De fator para texto:
d.f$novaColuna =
as.character(d.f$colunaFator)
De fator para número:
d.f$novaColuna =
as.numeric(
as.character(d.f$colunaFator))
A representação interna de um
fator é diferente do seu texto
76
74. Para:
m1 <- matrix(1:12, ncol = 3)
Soma das colunas (um valor para cada coluna):
colSums(m1)
[1] 10 26 42
Ou
apply(m1,2,sum)
[1] 10 26 42
77
75. Soma das linhas (um valor para cada linha):
rowSums(m1)
[1] 15 18 21 24
Ou
apply(m1,1,sum)
[1] 15 18 21 24
Posso usar
qualquer função.
Até próprias
78
76. aggregate(salario ~ instrucao,
data = milsa, mean)
instrucao salario
1 1oGrau 7.836667
2 2oGrau 11.528333
3 Superior 16.475000
79