Universidade Federal do Paraná
Curso de Estatística
CE 083 -
Estatística Computacional I - 2014/2
Prof. Dr. Walmes Marques Zeviani
Tabela de conteúdo
O operador colchetes após o nome de um objeto é usado para fazer seleção dos elementos do objeto. A seleção pode ser:
x[3]
, seleciona o terceiro elemento;x[c(3,8,2)]
, seleciona o terceiro, o oitavo e o segundo;x[-c(5,9)]
, exclui o quinto e o nono;x[3:7]
, seleciona do terceiro ao sétimo.x["andre"]
, elemento cujo nome é andre;x[c("jonas","marcos","cleiton")]
, seleciona 3 elementos pelo
nome;x[x<9]
, seleciona os elementos que são menores que 9;x[x>4 & x<7]
, seleciona elementos que então entre 4 e 7.##-----------------------------------------------------------------------------
## Criar um vetor.
x <- c(2, 7, 5, 3, 8, 9, 20, 1)
## Estrututura do objeto (conteúdo e forma).
str(x)
## num [1:8] 2 7 5 3 8 9 20 1
names(x)
## NULL
##-----------------------------------------------------------------------------
## Seleção pelo índice.
x[3]
## [1] 5
x[3:5]
## [1] 5 3 8
x[c(3,5,2)]
## [1] 5 8 7
x[-c(3,5,2)]
## [1] 2 3 9 20 1
##-----------------------------------------------------------------------------
## Um vetor nomeado.
notas <- c(joao=9.6, lucas=6.7, andre=8.2, jonas=9, pedro=3.5,
sandra=6.5, regina=8.4, marisa=6.7, cassia=4.5, roseli=7.7,
teodoro=8.3, teobaldo=9.4, cleusa=4.6, matias=9.8)
str(notas)
## Named num [1:14] 9.6 6.7 8.2 9 3.5 6.5 8.4 6.7 4.5 7.7 ...
## - attr(*, "names")= chr [1:14] "joao" "lucas" "andre" "jonas" ...
names(notas)
## [1] "joao" "lucas" "andre" "jonas" "pedro" "sandra" "regina"
## [8] "marisa" "cassia" "roseli" "teodoro" "teobaldo" "cleusa" "matias"
faltas <- c(6, 12, 11, 5, 9, 6, 3, 11, 11, 15, 7, 15, 5, 5)
str(faltas)
## num [1:14] 6 12 11 5 9 6 3 11 11 15 ...
names(faltas)
## NULL
## Copiar os nomes de notas para faltas.
names(faltas) <- names(notas)
str(faltas)
## Named num [1:14] 6 12 11 5 9 6 3 11 11 15 ...
## - attr(*, "names")= chr [1:14] "joao" "lucas" "andre" "jonas" ...
notas["joao"]
## joao
## 9.6
notas[c("joao","teodoro","marisa","regina")]
## joao teodoro marisa regina
## 9.6 8.3 6.7 8.4
##-----------------------------------------------------------------------------
## Simples.
notas<7 ## Tem nota menor que 7?
## joao lucas andre jonas pedro sandra regina marisa cassia roseli
## FALSE TRUE FALSE FALSE TRUE TRUE FALSE TRUE TRUE FALSE
## teodoro teobaldo cleusa matias
## FALSE FALSE TRUE FALSE
faltas>12 ## Tem mais que 12 faltas?
## joao lucas andre jonas pedro sandra regina marisa cassia roseli
## FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
## teodoro teobaldo cleusa matias
## FALSE TRUE FALSE FALSE
notas>=5 ## Tem nota maior ou igual a 5?
## joao lucas andre jonas pedro sandra regina marisa cassia roseli
## TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE TRUE
## teodoro teobaldo cleusa matias
## TRUE TRUE FALSE TRUE
faltas<=6 ## Excede 6 faltas?
## joao lucas andre jonas pedro sandra regina marisa cassia roseli
## TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE FALSE FALSE
## teodoro teobaldo cleusa matias
## FALSE FALSE TRUE TRUE
notas==10 ## Ficou com nota 10?
## joao lucas andre jonas pedro sandra regina marisa cassia roseli
## FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## teodoro teobaldo cleusa matias
## FALSE FALSE FALSE FALSE
faltas!=8 ## Teve um número de faltas diferente de 8?
## joao lucas andre jonas pedro sandra regina marisa cassia roseli
## TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## teodoro teobaldo cleusa matias
## TRUE TRUE TRUE TRUE
##-----------------------------------------------------------------------------
## Compostas.
## Operador E (AND).
notas<7 & notas>=4 ## Teve nota menor que 7 E maior que 4?
## joao lucas andre jonas pedro sandra regina marisa cassia roseli
## FALSE TRUE FALSE FALSE FALSE TRUE FALSE TRUE TRUE FALSE
## teodoro teobaldo cleusa matias
## FALSE FALSE TRUE FALSE
## Operador OU (OR).
notas<4 | faltas>15 ## Teve nota menor que 4 OU mais que 15 faltas?
## joao lucas andre jonas pedro sandra regina marisa cassia roseli
## FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
## teodoro teobaldo cleusa matias
## FALSE FALSE FALSE FALSE
##-----------------------------------------------------------------------------
## Resumo.
all(faltas<=15) ## **Todos** tiveram igual ou menos de 15 faltas?
## [1] TRUE
any(notas<=2) ## **Alguém** com nota menor ou igual à 2?
## [1] FALSE
##-----------------------------------------------------------------------------
## Inversão ou negação.
!(faltas<20) ## Tem menos que 20 faltas SQN?
## joao lucas andre jonas pedro sandra regina marisa cassia roseli
## FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## teodoro teobaldo cleusa matias
## FALSE FALSE FALSE FALSE
!(faltas==15) ## Tem exatamente 15 faltas SQN?
## joao lucas andre jonas pedro sandra regina marisa cassia roseli
## TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
## teodoro teobaldo cleusa matias
## TRUE FALSE TRUE TRUE
##-----------------------------------------------------------------------------
## Pertence ao conjunto.
faltas%in%c(8,15,18) ## Tem 8, 15 ou 18 faltas?
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE
##-----------------------------------------------------------------------------
## Seleção de vetores por regra lógica.
i <- notas<7 ## De exame por nota?
str(i)
## Named logi [1:14] FALSE TRUE FALSE FALSE TRUE TRUE ...
## - attr(*, "names")= chr [1:14] "joao" "lucas" "andre" "jonas" ...
notas[i]
## lucas pedro sandra marisa cassia cleusa
## 6.7 3.5 6.5 6.7 4.5 4.6
notas[!i]
## joao andre jonas regina roseli teodoro teobaldo matias
## 9.6 8.2 9.0 8.4 7.7 8.3 9.4 9.8
j <- notas>7 & faltas<10 ## Estão aprovados?
notas[j]
## joao jonas regina teodoro matias
## 9.6 9.0 8.4 8.3 9.8
notas[notas<4 | faltas>12] ## Reprovados ou por nota ou por faltas?
## pedro roseli teobaldo
## 3.5 7.7 9.4
##-----------------------------------------------------------------------------
## Classificar de acordo com as regras lógicas.
## Aprovação por nota.
aNota <- ifelse(notas>=7, "Aprovado", "Reprovado")
aNota
## joao lucas andre jonas pedro sandra regina
## "Aprovado" "Reprovado" "Aprovado" "Aprovado" "Reprovado" "Reprovado" "Aprovado"
## marisa cassia roseli teodoro teobaldo cleusa matias
## "Reprovado" "Reprovado" "Aprovado" "Aprovado" "Aprovado" "Reprovado" "Aprovado"
## Aprovação por frequência.
aFalt <- ifelse(faltas>12, "Reprovado", "Aprovado")
aFalt
## joao lucas andre jonas pedro sandra regina
## "Aprovado" "Aprovado" "Aprovado" "Aprovado" "Aprovado" "Aprovado" "Aprovado"
## marisa cassia roseli teodoro teobaldo cleusa matias
## "Aprovado" "Aprovado" "Reprovado" "Aprovado" "Reprovado" "Aprovado" "Aprovado"
## Aprovação geral.
ifelse(aNota=="Aprovado" & aFalt=="Aprovado", "Aprovado", "Reprovado")
## joao lucas andre jonas pedro sandra regina
## "Aprovado" "Reprovado" "Aprovado" "Aprovado" "Reprovado" "Reprovado" "Aprovado"
## marisa cassia roseli teodoro teobaldo cleusa matias
## "Reprovado" "Reprovado" "Reprovado" "Aprovado" "Reprovado" "Reprovado" "Aprovado"
## Teste composto/aninhados.
n <- notas>=5 ## Tem nota para aprovação?
f <- faltas<=12 ## Tem frequência para aprovação?
## Qual a condição do aluno?
cond <- ifelse(n & f,
"Aprovado",
ifelse(f & !n,
"Rep. nota",
"Rep. faltas"))
cond
## joao lucas andre jonas pedro sandra
## "Aprovado" "Aprovado" "Aprovado" "Aprovado" "Rep. nota" "Aprovado"
## regina marisa cassia roseli teodoro teobaldo
## "Aprovado" "Aprovado" "Rep. nota" "Rep. faltas" "Aprovado" "Rep. faltas"
## cleusa matias
## "Rep. nota" "Aprovado"
## Tabela de dados será visto com detalhes.
data.frame(notas, faltas, cond)
## notas faltas cond
## joao 9.6 6 Aprovado
## lucas 6.7 12 Aprovado
## andre 8.2 11 Aprovado
## jonas 9.0 5 Aprovado
## pedro 3.5 9 Rep. nota
## sandra 6.5 6 Aprovado
## regina 8.4 3 Aprovado
## marisa 6.7 11 Aprovado
## cassia 4.5 11 Rep. nota
## roseli 7.7 15 Rep. faltas
## teodoro 8.3 7 Aprovado
## teobaldo 9.4 15 Rep. faltas
## cleusa 4.6 5 Rep. nota
## matias 9.8 5 Aprovado
##-----------------------------------------------------------------------------
## Sequências.
seq(from=2, to=23, by=2.5)
## [1] 2.0 4.5 7.0 9.5 12.0 14.5 17.0 19.5 22.0
seq(2, 23, 2.5)
## [1] 2.0 4.5 7.0 9.5 12.0 14.5 17.0 19.5 22.0
seq(to=23, from=2, by=2.5)
## [1] 2.0 4.5 7.0 9.5 12.0 14.5 17.0 19.5 22.0
seq(1, 5, length.out=11)
## [1] 1.0 1.4 1.8 2.2 2.6 3.0 3.4 3.8 4.2 4.6 5.0
seq(1, by=2, length.out=11)
## [1] 1 3 5 7 9 11 13 15 17 19 21
seq(to=40, by=2, length.out=11)
## [1] 20 22 24 26 28 30 32 34 36 38 40
##-----------------------------------------------------------------------------
## Repetições.
rep(c("a","b","c"), times=3)
## [1] "a" "b" "c" "a" "b" "c" "a" "b" "c"
rep(c("a","b","c"), each=3)
## [1] "a" "a" "a" "b" "b" "b" "c" "c" "c"
##-----------------------------------------------------------------------------
## Sequências e repetições combinadas.
rep(1:5, each=5)
## [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5
rep(seq(0, 2*pi, pi/4), times=2)
## [1] 0.0000 0.7854 1.5708 2.3562 3.1416 3.9270 4.7124 5.4978 6.2832 0.0000 0.7854 1.5708
## [13] 2.3562 3.1416 3.9270 4.7124 5.4978 6.2832
##-----------------------------------------------------------------------------
## Amostra aleatória de uma população/lista.
lista <- names(notas)
lista
## [1] "joao" "lucas" "andre" "jonas" "pedro" "sandra" "regina"
## [8] "marisa" "cassia" "roseli" "teodoro" "teobaldo" "cleusa" "matias"
sample(lista, size=5)
## [1] "cleusa" "joao" "sandra" "teodoro" "marisa"
sample(lista, size=20)
## Error: cannot take a sample larger than the population when 'replace = FALSE'
sample(lista, size=20, replace=TRUE)
## [1] "cassia" "andre" "teobaldo" "jonas" "cleusa" "marisa" "cleusa"
## [8] "roseli" "teodoro" "matias" "lucas" "joao" "andre" "sandra"
## [15] "marisa" "marisa" "marisa" "cleusa" "jonas" "roseli"
##-----------------------------------------------------------------------------
## Números aleatórios uniformes.
runif(10)
## [1] 0.0009278 0.4171157 0.6397332 0.6712231 0.8474178 0.1590881 0.8711766 0.3729928
## [9] 0.3932308 0.8001271
##-----------------------------------------------------------------------------
## Ordenar.
sort(notas) ## Pelas notas.
## pedro cassia cleusa sandra lucas marisa roseli andre teodoro regina
## 3.5 4.5 4.6 6.5 6.7 6.7 7.7 8.2 8.3 8.4
## jonas teobaldo joao matias
## 9.0 9.4 9.6 9.8
sort(faltas) ## Pelas faltas.
## regina jonas cleusa matias joao sandra teodoro pedro andre marisa
## 3 5 5 5 6 6 7 9 11 11
## cassia lucas roseli teobaldo
## 11 12 15 15
sort(faltas, decreasing=TRUE) ## Ordem decrescente.
## roseli teobaldo lucas andre marisa cassia pedro teodoro joao sandra
## 15 15 12 11 11 11 9 7 6 6
## jonas cleusa matias regina
## 5 5 5 3
##-----------------------------------------------------------------------------
## Ordenar um pelo outro.
o <- order(notas)
o
## [1] 5 9 13 6 2 8 10 3 11 7 4 12 1 14
notas[o]
## pedro cassia cleusa sandra lucas marisa roseli andre teodoro regina
## 3.5 4.5 4.6 6.5 6.7 6.7 7.7 8.2 8.3 8.4
## jonas teobaldo joao matias
## 9.0 9.4 9.6 9.8
faltas[o]
## pedro cassia cleusa sandra lucas marisa roseli andre teodoro regina
## 9 11 5 6 12 11 15 11 7 3
## jonas teobaldo joao matias
## 5 15 6 5
o <- order(cond)
notas[o]
## joao lucas andre jonas sandra regina marisa teodoro matias roseli
## 9.6 6.7 8.2 9.0 6.5 8.4 6.7 8.3 9.8 7.7
## teobaldo pedro cassia cleusa
## 9.4 3.5 4.5 4.6
faltas[o]
## joao lucas andre jonas sandra regina marisa teodoro matias roseli
## 6 12 11 5 6 3 11 7 5 15
## teobaldo pedro cassia cleusa
## 15 9 11 5
cond[o]
## joao lucas andre jonas sandra regina
## "Aprovado" "Aprovado" "Aprovado" "Aprovado" "Aprovado" "Aprovado"
## marisa teodoro matias roseli teobaldo pedro
## "Aprovado" "Aprovado" "Aprovado" "Rep. faltas" "Rep. faltas" "Rep. nota"
## cassia cleusa
## "Rep. nota" "Rep. nota"
## Com esses exemplos você entendeu qual a diferença entre a função
## sort() e a função order()?
##-----------------------------------------------------------------------------
## Inverter ordem.
notas ## Ordem atual.
## joao lucas andre jonas pedro sandra regina marisa cassia roseli
## 9.6 6.7 8.2 9.0 3.5 6.5 8.4 6.7 4.5 7.7
## teodoro teobaldo cleusa matias
## 8.3 9.4 4.6 9.8
rev(notas) ## Ordem inversa (de trás pra frente).
## matias cleusa teobaldo teodoro roseli cassia marisa regina sandra pedro
## 9.8 4.6 9.4 8.3 7.7 4.5 6.7 8.4 6.5 3.5
## jonas andre lucas joao
## 9.0 8.2 6.7 9.6
##-----------------------------------------------------------------------------
## Aleatorizar a ordem dos elementos.
notas[order(runif(notas))]
## teodoro lucas teobaldo regina andre matias pedro roseli cleusa marisa
## 8.3 6.7 9.4 8.4 8.2 9.8 3.5 7.7 4.6 6.7
## jonas cassia joao sandra
## 9.0 4.5 9.6 6.5
sample(notas)
## marisa cleusa sandra teodoro roseli jonas teobaldo andre joao cassia
## 6.7 4.6 6.5 8.3 7.7 9.0 9.4 8.2 9.6 4.5
## pedro lucas matias regina
## 3.5 6.7 9.8 8.4