Capítulo 3 Acessando e manipulação de dados
3.1 Organização
Assista este conteúdo em Cap 2 - Organização Partes 1 e 2 no PVANet
Como mencionado anteriormente, vector
é uma das principais estruturas do R. Um vetor é uma sequência de elementos (1…n) do mesmo tipo organizados tal qual livros em uma prateleira.
No caso abaixo temos um vetor numérico que pode ser integer
ou double
.
<-c(25,17,55,3,12,315,10,2,3,11)
a a
## [1] 25 17 55 3 12 315 10 2 3 11
Posição | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
Elementos | 25 | 17 | 55 | 3 | 12 | 315 | 10 | 2 | 3 | 11 |
Um vetor também pode armazernar caracteres. Neste caso eles devem estar entre aspas duplas ("")
.
<-c("Z","f", "7","2a","Yes","A","Ab")
btypeof(b) b;
## [1] "Z" "f" "7" "2a" "Yes" "A" "Ab"
## [1] "character"
Embora tenhamos o número 7 entre os nossos elementos do vetor acima, por estar entre aspas o número 7 não é numéric
, mas caractere.
Lembrem-se que um vector
é um banco de dados da mesmo tipo Logo, se você colocar um número 7 dentro dele, o R vai automaticamente convertê-lo em caractere independente de estar entre ""
ou não.
Posição | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
Elementos | “Z” | “f” | “7” | “2a” | “Yes” | “A” | “Ab” |
Mesmo que você tenha apenas um único numeral ele será armazenado como vector, vector de comprimento = 1. Então um único número ou um único caractere será um vector.
<-(1)
ctypeof(c);is.vector(c) c;
## [1] 1
## [1] "double"
## [1] TRUE
Posição | 1 |
---|---|
Elemento | “1” |
Entender a posição de cada elemento dentro de um vector
é crucial! Saber a posição correta onde determinado(s) elemento(s) está(estão) facilita em muito nossa limpeza, nosso tratamento e demais passos para uma eficiente manipulação dos dados.
seq(100,50,-1)
## [1] 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82
## [20] 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63
## [39] 62 61 60 59 58 57 56 55 54 53 52 51 50
Atenção para os números dentro dos colchetes [1] [17] [33] [49]
. Como mencionado em aulas passadas, eles, os colchetes, indicam a posição de determinados elementos dentro de um banco de dados.
Especificamente o [1]
informa que o número 100 é o primeiro elemento, [17]
informa que o número 84 é o vigésimo elemento, [33]
informa que o número 68 é o trigésimo nono elemento, [49]
informa que o número 52 é o trigésimo nono elemento.
3.1.1 Usando [ ] - Subscribing ou indexing
3.1.1.1 Vetores
Podemos extrapolar esta ideia de utilização de []
para acessar informações dentros dos objetos que criamos ou importamos.
<-c("a","b","c","d","e")
d d
## [1] "a" "b" "c" "d" "e"
Posição | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
Elementos | “a” | “b” | “c” | “d” | “e” |
No vector d
temos cada um dos elementos em sua respectiva posição. Para acessar um elemento específico podemos inserir o número refere à sua posição dentro de []
.
Por exemplo:
1] d[
## [1] "a"
2] d[
## [1] "b"
3] d[
## [1] "c"
4] d[
## [1] "d"
5] d[
## [1] "e"
Importante saber que []
é muito versátil.
-1] # Acessa todos elementos exceto o primeiro d[
## [1] "b" "c" "d" "e"
<-d[3] # Atribuir o(s) elemento(s) de um vetor a outro vetor, ou criar um novo objeto de elementos já de objetos já existentes
d1 d1
## [1] "c"
1:3] # Acessar um intervalo de elementos d[
## [1] "a" "b" "c"
3:5] d[
## [1] "c" "d" "e"
c(1,3:5)] # Acessar utilizando combinações d[
## [1] "a" "c" "d" "e"
c(-2,-4)] # Exceto o segundo e quanto elementos d[
## [1] "a" "c" "e"
-3:-5] # Exceto o intervalo entre 3 e 5 d[
## [1] "a" "b"
Vamos dar mais uma olhada na importância do []
.
Considere os seguintes vetores.
Posição | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
Elemento | 50 | 34 | 11 | 7 | 24 | 631 | 20 | 4 | 7 | 21 |
Posição | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
Elemento | 100 | 2 | 56 | 12 | 0 | 65 | 93 | 10 | 244 | 1 |
Vamos somar os dois vetores e observe que são adicionados o primeiro elemento com primeiro elemento, segundo elemento com segundo elemento e assim por diante.
Em algumas outras linguagens se você quiser fazer esse procedimento, você vai provavelmente usar um loop
. Mas em R você pode simplesmente adicioná-los. Esse é o motivo do R ser linguagem vetorizada. Você pode testar qualquer método matemático (soma, divisão, booleana, lógica
).
<-c(50,34,11,7,24,631,20,4,7,21)
e<-c(100,2,56,12,0,65,93,10,244,1)
f e;f
## [1] 50 34 11 7 24 631 20 4 7 21
## [1] 100 2 56 12 0 65 93 10 244 1
+f e
## [1] 150 36 67 19 24 696 113 14 251 22
Neste caso funcionou tudo perfeitamente, pois nossos vetores são do mesmo tamanho.
No entanto, caso tenhamos vetores de tamanho diferentes o R vai fazer um procedimento chamado recycling of vector. O R vai fazer com que os dois vetores se encaixarem no mesmo tamanho caso sejam múltiplos. Basicamente, o R vai copiar os elementos do começo do vetor menor e adicionar ao seu fim até que fiqque do mesmo tamanho do outro vetor para, então, fazer a operação.
Posição | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
Elemento | 50 | 34 | 11 | 7 | 24 |
Posição | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
Elemento | 100 | 2 | 56 | 12 | 0 | 65 | 93 | 10 | 244 | 1 |
<-c( 50,34,11, 7,24)
h<-c(100, 2,56,12, 0,65,93,10,244,1)
i+i h
## [1] 150 36 67 19 24 115 127 21 251 25
h;i
## [1] 50 34 11 7 24
## [1] 100 2 56 12 0 65 93 10 244 1
+i h
## [1] 150 36 67 19 24 115 127 21 251 25
E se não forem múltiplos?
Nesse caso vamos ter uma aviso, em que o R ao fazer o preenchimento dos valores faltantes vai querer saber se está certo o que estamos fazendo e emitindo um warning
.
<-c(50,34,11,7,24,631)
j<-c(100,2,56,12,0,65,93,10,244,1)
k+k j
## Warning in j + k: comprimento do objeto maior não é múltiplo do comprimento do
## objeto menor
## [1] 150 36 67 19 24 696 143 44 255 8
3.1.1.2 Matrizes
Da mesma forma que utilizamos [ ]
para acessar elementos específicos em um vetor, estes podem ser utilizados para acessar elementos de matrizes.
Lembrando que as matrizes possuem duas dimensões e que as dimensões são organizadas na sequência de linhas e colunas.
<-cbind(matrix(14:1, ncol=2),matrix(1:14, ncol=2))
l l
## [,1] [,2] [,3] [,4]
## [1,] 14 7 1 8
## [2,] 13 6 2 9
## [3,] 12 5 3 10
## [4,] 11 4 4 11
## [5,] 10 3 5 12
## [6,] 9 2 6 13
## [7,] 8 1 7 14
As linhas e colunas [linhas, colunas]
são numeradas sequencialmente [x...n,y]
e [x,y...n]
.
Podemos desta forma selecionar uma ou várias linhas e colunas de uma só vez. Para isto basta apenas numerar a linhas ou coluna requerida.
1,] # Apenas a primeira linhas l[
## [1] 14 7 1 8
1] # Apenas a primeira coluna l[,
## [1] 14 13 12 11 10 9 8
1:3,] # O intervalo de linhas entre 1 a 3 l[
## [,1] [,2] [,3] [,4]
## [1,] 14 7 1 8
## [2,] 13 6 2 9
## [3,] 12 5 3 10
1:3] # O intervalo de colunas entre 1 e 3 l[,
## [,1] [,2] [,3]
## [1,] 14 7 1
## [2,] 13 6 2
## [3,] 12 5 3
## [4,] 11 4 4
## [5,] 10 3 5
## [6,] 9 2 6
## [7,] 8 1 7
-3,] # Exceto a terceira linha l[
## [,1] [,2] [,3] [,4]
## [1,] 14 7 1 8
## [2,] 13 6 2 9
## [3,] 11 4 4 11
## [4,] 10 3 5 12
## [5,] 9 2 6 13
## [6,] 8 1 7 14
-3] # Exceto a terceira coluna l[,
## [,1] [,2] [,3]
## [1,] 14 7 8
## [2,] 13 6 9
## [3,] 12 5 10
## [4,] 11 4 11
## [5,] 10 3 12
## [6,] 9 2 13
## [7,] 8 1 14
-1:-3,] # Exceto o intervalo de linhas entre 1 a 3 l[
## [,1] [,2] [,3] [,4]
## [1,] 11 4 4 11
## [2,] 10 3 5 12
## [3,] 9 2 6 13
## [4,] 8 1 7 14
-1:-3] # Exceto o intervalo de colunas entre 1 e 3 l[,
## [1] 8 9 10 11 12 13 14
Podemos também acessar elementos específicos de uma matriz definindo o “endereço” do elemento nas linhas e colunas.
2,3] # Acessa apenas o elemento do cruzamento da linha 2 e coluna 3 l[
## [1] 2
Para facilitar a manipulação das matrizes podemos nomear as linhas e colunas. Para isso podemos utilizar as funções colnames()
e rownames()
.
nrow(l) # Retorna o número de linhas
## [1] 7
ncol(l) # Retorna o número de colunas
## [1] 4
dim(l) # Retorna as dimnesões (n° de linhas e colunas)
## [1] 7 4
l
## [,1] [,2] [,3] [,4]
## [1,] 14 7 1 8
## [2,] 13 6 2 9
## [3,] 12 5 3 10
## [4,] 11 4 4 11
## [5,] 10 3 5 12
## [6,] 9 2 6 13
## [7,] 8 1 7 14
rownames(l)<-letters[1:7] # Atribui 7 letras minúsculas sequenciais de "a" até "g" como nomes das linhas
l
## [,1] [,2] [,3] [,4]
## a 14 7 1 8
## b 13 6 2 9
## c 12 5 3 10
## d 11 4 4 11
## e 10 3 5 12
## f 9 2 6 13
## g 8 1 7 14
colnames(l)<-LETTERS[1:ncol(l)] # Atribui letras maiúsculas sequenciais obedecendo o número de colunas como nomes das colunas
l
## A B C D
## a 14 7 1 8
## b 13 6 2 9
## c 12 5 3 10
## d 11 4 4 11
## e 10 3 5 12
## f 9 2 6 13
## g 8 1 7 14
Agora podemos acessar via nomes das linhas e colunas também.
"a",] # Apenas a primeira linhas l[
## A B C D
## 14 7 1 8
"A"] # Apenas a primeira coluna l[,
## a b c d e f g
## 14 13 12 11 10 9 8
1:3],] # O intervalo de linhas entre "a" a "c" l[letters[
## A B C D
## a 14 7 1 8
## b 13 6 2 9
## c 12 5 3 10
1:3]] # O intervalo de colunas entre "A" e "C" l[,LETTERS[
## A B C
## a 14 7 1
## b 13 6 2
## c 12 5 3
## d 11 4 4
## e 10 3 5
## f 9 2 6
## g 8 1 7
c("a","c","d"),] # Seleciona as linhas "a", "c" e "d" l[
## A B C D
## a 14 7 1 8
## c 12 5 3 10
## d 11 4 4 11
c("A","C","D")] # Seleciona as colunas "a", "c" e "d" l[,
## A C D
## a 14 1 8
## b 13 2 9
## c 12 3 10
## d 11 4 11
## e 10 5 12
## f 9 6 13
## g 8 7 14
3.1.1.3 Arrays
Sendo muito similares aos vetores e matrizes, os arrays podem ter n dimensões.
<-1:24
mdim(m)<-c(4,3,2)
m
## , , 1
##
## [,1] [,2] [,3]
## [1,] 1 5 9
## [2,] 2 6 10
## [3,] 3 7 11
## [4,] 4 8 12
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 13 17 21
## [2,] 14 18 22
## [3,] 15 19 23
## [4,] 16 20 24
# ou
<-array(1:24,c(4,3,2))
m m
## , , 1
##
## [,1] [,2] [,3]
## [1,] 1 5 9
## [2,] 2 6 10
## [3,] 3 7 11
## [4,] 4 8 12
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 13 17 21
## [2,] 14 18 22
## [3,] 15 19 23
## [4,] 16 20 24
1,,] # Retorna as primeiras linhas do array m[
## [,1] [,2]
## [1,] 1 13
## [2,] 5 17
## [3,] 9 21
2,] # Retorna as segundas colunas do array m[,
## [,1] [,2]
## [1,] 5 17
## [2,] 6 18
## [3,] 7 19
## [4,] 8 20
1,2,] # Retorna as intersecções entre as primeiras linhas com as segundas colunas m[
## [1] 5 17
1,2,2] # Retorna as intersecções entre a primeira linha com segunda coluna da sugunda camada m[
## [1] 17
3.1.1.4 Data Frame
Sendo semelhantes às matrizes
, os data frames
pode serm acessados pelo número das linhas ou colunas.
<-c("Flamengo", "Santos", "Palmeiras", "Grêmio", "Athletico Paranaense", "Săo Paulo", "Internacional", "Corinthians", "Fortaleza", "Goiás", "Bahia", "Vasco da Gama", "Atlético Mineiro", "Fluminense", "Botafogo", "Ceará", "Cruzeiro", "CSA", "Chapecoense", "Avaí")
Equipes<-c("38", "38", "38", "38", "38", "38", "38", "38", "38", "38", "38", "38", "38", "38", "38", "38", "38", "38", "38", "38")
Jogos<-c("28", "22", "21", "19", "18", "17", "16", "14", "15", "15", "12", "12", "13", "12", "13", "10", "7", "8", "7", "3")
Vitórias<-c("6", "8", "11", "8", "10", "12", "9", "14", "8", "7", "13", "13", "9", "10", "4", "9", "15", "8", "11", "11")
Empates<-c("4", "8", "6", "11", "10", "9", "13", "10", "15", "16", "13", "13", "16", "16", "21", "19", "16", "22", "20", "24")
Derrotas<-c("86", "60", "61", "64", "51", "39", "44", "42", "50", "46", "44", "39", "45", "38", "31", "36", "27", "24", "31", "18")
Gols.Pró<-c("37", "33", "32", "39", "32", "30", "39", "34", "49", "64", "43", "45", "49", "46", "45", "41", "46", "58", "52", "62")
Gols.Contra<-c("90", "74", "74", "65", "64", "63", "57", "56", "53", "52", "49", "49", "48", "46", "43", "39", "36", "32", "32", "20")
Pontos<-c("49", "27", "29", "25", "19", "9", "5", "8", "1", "-18", "1", "-6", "-4", "-8", "-14", "-5", "-19", "-34", "-21", "-44")
Saldo.de.Gols<-c("79", "65", "65", "57", "56", "55", "5", "49", "46", "46", "43", "43", "42", "4", "38", "34", "32", "28", "28", "18")
Aprov.<-c("Libertadores", "Libertadores", "Libertadores", "Libertadores", "Libertadores", "Libertadores", "Libertadores", "Libertadores", "Sulamericana", "Sulamericana", "Sulamericana", "Sulamericana", "Sulamericana", "Sulamericana", "NA", "NA", "Rebaixado", "Rebaixado", "Rebaixado", "Rebaixado")
Destino.2019<-as.data.frame(cbind(Equipes,Jogos,Vitórias,Empates,Derrotas,Gols.Pró,Gols.Contra,Pontos,Saldo.de.Gols, Aprov., Destino)) Campeonato.Brasileiro
Equipes | Jogos | Vitórias | Empates | Derrotas | Gols Pró | Gols Contra | Pontos | Saldo de Gols | Aprov | Destino |
---|---|---|---|---|---|---|---|---|---|---|
Flamengo | 38 | 28 | 6 | 4 | 86 | 37 | 90 | 49 | 79 | Libertadores |
Santos | 38 | 22 | 8 | 8 | 60 | 33 | 74 | 27 | 65 | Libertadores |
Palmeiras | 38 | 21 | 11 | 6 | 61 | 32 | 74 | 29 | 65 | Libertadores |
Grêmio | 38 | 19 | 8 | 11 | 64 | 39 | 65 | 25 | 57 | Libertadores |
Athletico Paranaense | 38 | 18 | 10 | 10 | 51 | 32 | 64 | 19 | 56 | Libertadores |
Săo Paulo | 38 | 17 | 12 | 9 | 39 | 30 | 63 | 9 | 55 | Libertadores |
Internacional | 38 | 16 | 9 | 13 | 44 | 39 | 57 | 5 | 5 | Libertadores |
Corinthians | 38 | 14 | 14 | 10 | 42 | 34 | 56 | 8 | 49 | Libertadores |
Fortaleza | 38 | 15 | 8 | 15 | 50 | 49 | 53 | 1 | 46 | Sulamericana |
Goiás | 38 | 15 | 7 | 16 | 46 | 64 | 52 | -18 | 46 | Sulamericana |
Bahia | 38 | 12 | 13 | 13 | 44 | 43 | 49 | 1 | 43 | Sulamericana |
Vasco da Gama | 38 | 12 | 13 | 13 | 39 | 45 | 49 | -6 | 43 | Sulamericana |
Atlético Mineiro | 38 | 13 | 9 | 16 | 45 | 49 | 48 | -4 | 42 | Sulamericana |
Fluminense | 38 | 12 | 10 | 16 | 38 | 46 | 46 | -8 | 4 | Sulamericana |
Botafogo | 38 | 13 | 4 | 21 | 31 | 45 | 43 | -14 | 38 | NA |
Ceará | 38 | 10 | 9 | 19 | 36 | 41 | 39 | -5 | 34 | NA |
Cruzeiro | 38 | 7 | 15 | 16 | 27 | 46 | 36 | -19 | 32 | Rebaixado |
CSA | 38 | 8 | 8 | 22 | 24 | 58 | 32 | -34 | 28 | Rebaixado |
Chapecoense | 38 | 7 | 11 | 20 | 31 | 52 | 32 | -21 | 28 | Rebaixado |
Avaí | 38 | 3 | 11 | 24 | 18 | 62 | 20 | -44 | 18 | Rebaixado |
.2019[1,] # Retorna a primeira linha do data frame Campeonato.Brasileiro
## Equipes Jogos Vitórias Empates Derrotas Gols.Pró Gols.Contra Pontos
## 1 Flamengo 38 28 6 4 86 37 90
## Saldo.de.Gols Aprov. Destino
## 1 49 79 Libertadores
.2019[,1] # Retorna a primeira coluna do data frame Campeonato.Brasileiro
## [1] "Flamengo" "Santos" "Palmeiras"
## [4] "Grêmio" "Athletico Paranaense" "Săo Paulo"
## [7] "Internacional" "Corinthians" "Fortaleza"
## [10] "Goiás" "Bahia" "Vasco da Gama"
## [13] "Atlético Mineiro" "Fluminense" "Botafogo"
## [16] "Ceará" "Cruzeiro" "CSA"
## [19] "Chapecoense" "Avaí"
Todas as outras combinações utilizadas nas matrizes
podem ser utilizadas aqui nos data frames
.
No entanto, os data frames possuem uma outra “vantagem” sobre as matrizes. Além de armazenar elementos de diferentes tipos (numeric, character, logical
e etc), eles também podemser acessados utilizando $
.
.2019$Equipes # Retorna os elementos da coluna "Equipes" Campeonato.Brasileiro
## [1] "Flamengo" "Santos" "Palmeiras"
## [4] "Grêmio" "Athletico Paranaense" "Săo Paulo"
## [7] "Internacional" "Corinthians" "Fortaleza"
## [10] "Goiás" "Bahia" "Vasco da Gama"
## [13] "Atlético Mineiro" "Fluminense" "Botafogo"
## [16] "Ceará" "Cruzeiro" "CSA"
## [19] "Chapecoense" "Avaí"
.2019$Vitórias # Retorna os elementos da coluna "Vitórias" Campeonato.Brasileiro
## [1] "28" "22" "21" "19" "18" "17" "16" "14" "15" "15" "12" "12" "13" "12" "13"
## [16] "10" "7" "8" "7" "3"
.2019$Gols.Pró # Retorna os elementos da coluna "Gols.Pró" Campeonato.Brasileiro
## [1] "86" "60" "61" "64" "51" "39" "44" "42" "50" "46" "44" "39" "45" "38" "31"
## [16] "36" "27" "24" "31" "18"
.2019$Saldo.de.Gols # Retorna os elementos da coluna "Saldo.de.Gols" Campeonato.Brasileiro
## [1] "49" "27" "29" "25" "19" "9" "5" "8" "1" "-18" "1" "-6"
## [13] "-4" "-8" "-14" "-5" "-19" "-34" "-21" "-44"
.2019$Destino # Retorna os elementos da coluna "Destino" Campeonato.Brasileiro
## [1] "Libertadores" "Libertadores" "Libertadores" "Libertadores" "Libertadores"
## [6] "Libertadores" "Libertadores" "Libertadores" "Sulamericana" "Sulamericana"
## [11] "Sulamericana" "Sulamericana" "Sulamericana" "Sulamericana" "NA"
## [16] "NA" "Rebaixado" "Rebaixado" "Rebaixado" "Rebaixado"
.2019$Equipes[2] # Retorna o segundo elemento da coluna "Nome" Campeonato.Brasileiro
## [1] "Santos"
.2019$Vitórias[5] # Retorna o quinto elemento da coluna "Vitórias" Campeonato.Brasileiro
## [1] "18"
.2019$Gols.Pró[3] # Retorna os elementos da coluna "Gols.Pró" Campeonato.Brasileiro
## [1] "61"
.2019$Saldo.de.Gols[1] # Retorna os elementos da coluna "Nivel.deR" Campeonato.Brasileiro
## [1] "49"
.2019$Destino[10] # Retorna os elementos da décima coluna "Destino" Campeonato.Brasileiro
## [1] "Sulamericana"
Outra maneira de acessar informações pode através []
.
.2019[Campeonato.Brasileiro.2019$Equipes=="Flamengo",] # Retorna apenas as informações da coluna "Equipes" que atendem o critério "Flamengo" Campeonato.Brasileiro
## Equipes Jogos Vitórias Empates Derrotas Gols.Pró Gols.Contra Pontos
## 1 Flamengo 38 28 6 4 86 37 90
## Saldo.de.Gols Aprov. Destino
## 1 49 79 Libertadores
split(Campeonato.Brasileiro.2019,Destino) # Retorna apenas as informações da coluna "Destino"
## $Libertadores
## Equipes Jogos Vitórias Empates Derrotas Gols.Pró Gols.Contra
## 1 Flamengo 38 28 6 4 86 37
## 2 Santos 38 22 8 8 60 33
## 3 Palmeiras 38 21 11 6 61 32
## 4 Grêmio 38 19 8 11 64 39
## 5 Athletico Paranaense 38 18 10 10 51 32
## 6 Săo Paulo 38 17 12 9 39 30
## 7 Internacional 38 16 9 13 44 39
## 8 Corinthians 38 14 14 10 42 34
## Pontos Saldo.de.Gols Aprov. Destino
## 1 90 49 79 Libertadores
## 2 74 27 65 Libertadores
## 3 74 29 65 Libertadores
## 4 65 25 57 Libertadores
## 5 64 19 56 Libertadores
## 6 63 9 55 Libertadores
## 7 57 5 5 Libertadores
## 8 56 8 49 Libertadores
##
## $`NA`
## Equipes Jogos Vitórias Empates Derrotas Gols.Pró Gols.Contra Pontos
## 15 Botafogo 38 13 4 21 31 45 43
## 16 Ceará 38 10 9 19 36 41 39
## Saldo.de.Gols Aprov. Destino
## 15 -14 38 NA
## 16 -5 34 NA
##
## $Rebaixado
## Equipes Jogos Vitórias Empates Derrotas Gols.Pró Gols.Contra Pontos
## 17 Cruzeiro 38 7 15 16 27 46 36
## 18 CSA 38 8 8 22 24 58 32
## 19 Chapecoense 38 7 11 20 31 52 32
## 20 Avaí 38 3 11 24 18 62 20
## Saldo.de.Gols Aprov. Destino
## 17 -19 32 Rebaixado
## 18 -34 28 Rebaixado
## 19 -21 28 Rebaixado
## 20 -44 18 Rebaixado
##
## $Sulamericana
## Equipes Jogos Vitórias Empates Derrotas Gols.Pró Gols.Contra Pontos
## 9 Fortaleza 38 15 8 15 50 49 53
## 10 Goiás 38 15 7 16 46 64 52
## 11 Bahia 38 12 13 13 44 43 49
## 12 Vasco da Gama 38 12 13 13 39 45 49
## 13 Atlético Mineiro 38 13 9 16 45 49 48
## 14 Fluminense 38 12 10 16 38 46 46
## Saldo.de.Gols Aprov. Destino
## 9 1 46 Sulamericana
## 10 -18 46 Sulamericana
## 11 1 43 Sulamericana
## 12 -6 43 Sulamericana
## 13 -4 42 Sulamericana
## 14 -8 4 Sulamericana
Vou criar alguns verores aleatórios.
<- rep(letters[1:4],each=5)
gr1 gr1
## [1] "a" "a" "a" "a" "a" "b" "b" "b" "b" "b" "c" "c" "c" "c" "c" "d" "d" "d" "d"
## [20] "d"
<- c(rep(1:2,each=5),rep(2:3,each=5))
gr2 gr2
## [1] 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3
<- factor(rep(letters[1:4],each=5))
fc1 fc1
## [1] a a a a a b b b b b c c c c c d d d d d
## Levels: a b c d
<- factor(c(rep(1:2,each=5),rep(2:3,each=5)))
fc2 fc2
## [1] 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3
## Levels: 1 2 3
split(Campeonato.Brasileiro.2019,f=(gr1)) # Divide o Campeonato.Brasileiro.2019 de acordo com os vetores informados
## $a
## Equipes Jogos Vitórias Empates Derrotas Gols.Pró Gols.Contra
## 1 Flamengo 38 28 6 4 86 37
## 2 Santos 38 22 8 8 60 33
## 3 Palmeiras 38 21 11 6 61 32
## 4 Grêmio 38 19 8 11 64 39
## 5 Athletico Paranaense 38 18 10 10 51 32
## Pontos Saldo.de.Gols Aprov. Destino
## 1 90 49 79 Libertadores
## 2 74 27 65 Libertadores
## 3 74 29 65 Libertadores
## 4 65 25 57 Libertadores
## 5 64 19 56 Libertadores
##
## $b
## Equipes Jogos Vitórias Empates Derrotas Gols.Pró Gols.Contra Pontos
## 6 Săo Paulo 38 17 12 9 39 30 63
## 7 Internacional 38 16 9 13 44 39 57
## 8 Corinthians 38 14 14 10 42 34 56
## 9 Fortaleza 38 15 8 15 50 49 53
## 10 Goiás 38 15 7 16 46 64 52
## Saldo.de.Gols Aprov. Destino
## 6 9 55 Libertadores
## 7 5 5 Libertadores
## 8 8 49 Libertadores
## 9 1 46 Sulamericana
## 10 -18 46 Sulamericana
##
## $c
## Equipes Jogos Vitórias Empates Derrotas Gols.Pró Gols.Contra Pontos
## 11 Bahia 38 12 13 13 44 43 49
## 12 Vasco da Gama 38 12 13 13 39 45 49
## 13 Atlético Mineiro 38 13 9 16 45 49 48
## 14 Fluminense 38 12 10 16 38 46 46
## 15 Botafogo 38 13 4 21 31 45 43
## Saldo.de.Gols Aprov. Destino
## 11 1 43 Sulamericana
## 12 -6 43 Sulamericana
## 13 -4 42 Sulamericana
## 14 -8 4 Sulamericana
## 15 -14 38 NA
##
## $d
## Equipes Jogos Vitórias Empates Derrotas Gols.Pró Gols.Contra Pontos
## 16 Ceará 38 10 9 19 36 41 39
## 17 Cruzeiro 38 7 15 16 27 46 36
## 18 CSA 38 8 8 22 24 58 32
## 19 Chapecoense 38 7 11 20 31 52 32
## 20 Avaí 38 3 11 24 18 62 20
## Saldo.de.Gols Aprov. Destino
## 16 -5 34 NA
## 17 -19 32 Rebaixado
## 18 -34 28 Rebaixado
## 19 -21 28 Rebaixado
## 20 -44 18 Rebaixado
split(Campeonato.Brasileiro.2019,f=(gr2)) # Divide o Campeonato.Brasileiro.2019 de acordo com os vetores informados
## $`1`
## Equipes Jogos Vitórias Empates Derrotas Gols.Pró Gols.Contra
## 1 Flamengo 38 28 6 4 86 37
## 2 Santos 38 22 8 8 60 33
## 3 Palmeiras 38 21 11 6 61 32
## 4 Grêmio 38 19 8 11 64 39
## 5 Athletico Paranaense 38 18 10 10 51 32
## Pontos Saldo.de.Gols Aprov. Destino
## 1 90 49 79 Libertadores
## 2 74 27 65 Libertadores
## 3 74 29 65 Libertadores
## 4 65 25 57 Libertadores
## 5 64 19 56 Libertadores
##
## $`2`
## Equipes Jogos Vitórias Empates Derrotas Gols.Pró Gols.Contra Pontos
## 6 Săo Paulo 38 17 12 9 39 30 63
## 7 Internacional 38 16 9 13 44 39 57
## 8 Corinthians 38 14 14 10 42 34 56
## 9 Fortaleza 38 15 8 15 50 49 53
## 10 Goiás 38 15 7 16 46 64 52
## 11 Bahia 38 12 13 13 44 43 49
## 12 Vasco da Gama 38 12 13 13 39 45 49
## 13 Atlético Mineiro 38 13 9 16 45 49 48
## 14 Fluminense 38 12 10 16 38 46 46
## 15 Botafogo 38 13 4 21 31 45 43
## Saldo.de.Gols Aprov. Destino
## 6 9 55 Libertadores
## 7 5 5 Libertadores
## 8 8 49 Libertadores
## 9 1 46 Sulamericana
## 10 -18 46 Sulamericana
## 11 1 43 Sulamericana
## 12 -6 43 Sulamericana
## 13 -4 42 Sulamericana
## 14 -8 4 Sulamericana
## 15 -14 38 NA
##
## $`3`
## Equipes Jogos Vitórias Empates Derrotas Gols.Pró Gols.Contra Pontos
## 16 Ceará 38 10 9 19 36 41 39
## 17 Cruzeiro 38 7 15 16 27 46 36
## 18 CSA 38 8 8 22 24 58 32
## 19 Chapecoense 38 7 11 20 31 52 32
## 20 Avaí 38 3 11 24 18 62 20
## Saldo.de.Gols Aprov. Destino
## 16 -5 34 NA
## 17 -19 32 Rebaixado
## 18 -34 28 Rebaixado
## 19 -21 28 Rebaixado
## 20 -44 18 Rebaixado
split(Campeonato.Brasileiro.2019,f=list(gr1,gr2), drop = TRUE, sep = ": ") # Divide o Campeonato.Brasileiro.2019 de acordo com as listas informadas
## $`a: 1`
## Equipes Jogos Vitórias Empates Derrotas Gols.Pró Gols.Contra
## 1 Flamengo 38 28 6 4 86 37
## 2 Santos 38 22 8 8 60 33
## 3 Palmeiras 38 21 11 6 61 32
## 4 Grêmio 38 19 8 11 64 39
## 5 Athletico Paranaense 38 18 10 10 51 32
## Pontos Saldo.de.Gols Aprov. Destino
## 1 90 49 79 Libertadores
## 2 74 27 65 Libertadores
## 3 74 29 65 Libertadores
## 4 65 25 57 Libertadores
## 5 64 19 56 Libertadores
##
## $`b: 2`
## Equipes Jogos Vitórias Empates Derrotas Gols.Pró Gols.Contra Pontos
## 6 Săo Paulo 38 17 12 9 39 30 63
## 7 Internacional 38 16 9 13 44 39 57
## 8 Corinthians 38 14 14 10 42 34 56
## 9 Fortaleza 38 15 8 15 50 49 53
## 10 Goiás 38 15 7 16 46 64 52
## Saldo.de.Gols Aprov. Destino
## 6 9 55 Libertadores
## 7 5 5 Libertadores
## 8 8 49 Libertadores
## 9 1 46 Sulamericana
## 10 -18 46 Sulamericana
##
## $`c: 2`
## Equipes Jogos Vitórias Empates Derrotas Gols.Pró Gols.Contra Pontos
## 11 Bahia 38 12 13 13 44 43 49
## 12 Vasco da Gama 38 12 13 13 39 45 49
## 13 Atlético Mineiro 38 13 9 16 45 49 48
## 14 Fluminense 38 12 10 16 38 46 46
## 15 Botafogo 38 13 4 21 31 45 43
## Saldo.de.Gols Aprov. Destino
## 11 1 43 Sulamericana
## 12 -6 43 Sulamericana
## 13 -4 42 Sulamericana
## 14 -8 4 Sulamericana
## 15 -14 38 NA
##
## $`d: 3`
## Equipes Jogos Vitórias Empates Derrotas Gols.Pró Gols.Contra Pontos
## 16 Ceará 38 10 9 19 36 41 39
## 17 Cruzeiro 38 7 15 16 27 46 36
## 18 CSA 38 8 8 22 24 58 32
## 19 Chapecoense 38 7 11 20 31 52 32
## 20 Avaí 38 3 11 24 18 62 20
## Saldo.de.Gols Aprov. Destino
## 16 -5 34 NA
## 17 -19 32 Rebaixado
## 18 -34 28 Rebaixado
## 19 -21 28 Rebaixado
## 20 -44 18 Rebaixado
Alterando elementos dentro do data frame
.
.2019$Destino # Retorna apenas as informações da coluna "Destino" Campeonato.Brasileiro
## [1] "Libertadores" "Libertadores" "Libertadores" "Libertadores" "Libertadores"
## [6] "Libertadores" "Libertadores" "Libertadores" "Sulamericana" "Sulamericana"
## [11] "Sulamericana" "Sulamericana" "Sulamericana" "Sulamericana" "NA"
## [16] "NA" "Rebaixado" "Rebaixado" "Rebaixado" "Rebaixado"
.2019$Destino[Campeonato.Brasileiro.2019$Destino=="NA"]<-"Lugar Algum"
Campeonato.Brasileiro# Substitui "Libertadores" na coluna "Destino" por "Liberta".
Veja como ficou com a informação alterada.
Equipes | Jogos | Vitórias | Empates | Derrotas | Gols Pró | Gols Contra | Pontos | Saldo de Gols | Aprov | Destino |
---|---|---|---|---|---|---|---|---|---|---|
Flamengo | 38 | 28 | 6 | 4 | 86 | 37 | 90 | 49 | 79 | Libertadores |
Santos | 38 | 22 | 8 | 8 | 60 | 33 | 74 | 27 | 65 | Libertadores |
Palmeiras | 38 | 21 | 11 | 6 | 61 | 32 | 74 | 29 | 65 | Libertadores |
Grêmio | 38 | 19 | 8 | 11 | 64 | 39 | 65 | 25 | 57 | Libertadores |
Athletico Paranaense | 38 | 18 | 10 | 10 | 51 | 32 | 64 | 19 | 56 | Libertadores |
Săo Paulo | 38 | 17 | 12 | 9 | 39 | 30 | 63 | 9 | 55 | Libertadores |
Internacional | 38 | 16 | 9 | 13 | 44 | 39 | 57 | 5 | 5 | Libertadores |
Corinthians | 38 | 14 | 14 | 10 | 42 | 34 | 56 | 8 | 49 | Libertadores |
Fortaleza | 38 | 15 | 8 | 15 | 50 | 49 | 53 | 1 | 46 | Sulamericana |
Goiás | 38 | 15 | 7 | 16 | 46 | 64 | 52 | -18 | 46 | Sulamericana |
Bahia | 38 | 12 | 13 | 13 | 44 | 43 | 49 | 1 | 43 | Sulamericana |
Vasco da Gama | 38 | 12 | 13 | 13 | 39 | 45 | 49 | -6 | 43 | Sulamericana |
Atlético Mineiro | 38 | 13 | 9 | 16 | 45 | 49 | 48 | -4 | 42 | Sulamericana |
Fluminense | 38 | 12 | 10 | 16 | 38 | 46 | 46 | -8 | 4 | Sulamericana |
Botafogo | 38 | 13 | 4 | 21 | 31 | 45 | 43 | -14 | 38 | Lugar Algum |
Ceará | 38 | 10 | 9 | 19 | 36 | 41 | 39 | -5 | 34 | Lugar Algum |
Cruzeiro | 38 | 7 | 15 | 16 | 27 | 46 | 36 | -19 | 32 | Rebaixado |
CSA | 38 | 8 | 8 | 22 | 24 | 58 | 32 | -34 | 28 | Rebaixado |
Chapecoense | 38 | 7 | 11 | 20 | 31 | 52 | 32 | -21 | 28 | Rebaixado |
Avaí | 38 | 3 | 11 | 24 | 18 | 62 | 20 | -44 | 18 | Rebaixado |
Vamos expurgar remover o Vasco da Gama da nossa lista.
.2019$Equipes # Retorna apenas as informações da coluna "Equipes" Campeonato.Brasileiro
## [1] "Flamengo" "Santos" "Palmeiras"
## [4] "Grêmio" "Athletico Paranaense" "Săo Paulo"
## [7] "Internacional" "Corinthians" "Fortaleza"
## [10] "Goiás" "Bahia" "Vasco da Gama"
## [13] "Atlético Mineiro" "Fluminense" "Botafogo"
## [16] "Ceará" "Cruzeiro" "CSA"
## [19] "Chapecoense" "Avaí"
2019.SV<-Campeonato.Brasileiro.2019[Campeonato.Brasileiro.2019$Equipes!="Vasco da Gama",] #Seleciona tudo exceto aquilo que for de "Vasco da Gama" Campeonato.Brasileiro.
Equipes | Jogos | Vitórias | Empates | Derrotas | Gols Pró | Gols Contra | Pontos | Saldo de Gols | Aprov | Destino | |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | Flamengo | 38 | 28 | 6 | 4 | 86 | 37 | 90 | 49 | 79 | Libertadores |
2 | Santos | 38 | 22 | 8 | 8 | 60 | 33 | 74 | 27 | 65 | Libertadores |
3 | Palmeiras | 38 | 21 | 11 | 6 | 61 | 32 | 74 | 29 | 65 | Libertadores |
4 | Grêmio | 38 | 19 | 8 | 11 | 64 | 39 | 65 | 25 | 57 | Libertadores |
5 | Athletico Paranaense | 38 | 18 | 10 | 10 | 51 | 32 | 64 | 19 | 56 | Libertadores |
6 | Săo Paulo | 38 | 17 | 12 | 9 | 39 | 30 | 63 | 9 | 55 | Libertadores |
7 | Internacional | 38 | 16 | 9 | 13 | 44 | 39 | 57 | 5 | 5 | Libertadores |
8 | Corinthians | 38 | 14 | 14 | 10 | 42 | 34 | 56 | 8 | 49 | Libertadores |
9 | Fortaleza | 38 | 15 | 8 | 15 | 50 | 49 | 53 | 1 | 46 | Sulamericana |
10 | Goiás | 38 | 15 | 7 | 16 | 46 | 64 | 52 | -18 | 46 | Sulamericana |
11 | Bahia | 38 | 12 | 13 | 13 | 44 | 43 | 49 | 1 | 43 | Sulamericana |
13 | Atlético Mineiro | 38 | 13 | 9 | 16 | 45 | 49 | 48 | -4 | 42 | Sulamericana |
14 | Fluminense | 38 | 12 | 10 | 16 | 38 | 46 | 46 | -8 | 4 | Sulamericana |
15 | Botafogo | 38 | 13 | 4 | 21 | 31 | 45 | 43 | -14 | 38 | Lugar Algum |
16 | Ceará | 38 | 10 | 9 | 19 | 36 | 41 | 39 | -5 | 34 | Lugar Algum |
17 | Cruzeiro | 38 | 7 | 15 | 16 | 27 | 46 | 36 | -19 | 32 | Rebaixado |
18 | CSA | 38 | 8 | 8 | 22 | 24 | 58 | 32 | -34 | 28 | Rebaixado |
19 | Chapecoense | 38 | 7 | 11 | 20 | 31 | 52 | 32 | -21 | 28 | Rebaixado |
20 | Avaí | 38 | 3 | 11 | 24 | 18 | 62 | 20 | -44 | 18 | Rebaixado |
Atendendo a pedidos, vamos continuar brevemente com manipulação de dados em data.frame
.
As funções grep, grepl, regexpr, gregexpr e regexec
busca por elementos de um objeto que coincidem com um argumento padrão.
3.1.2 grep()
grep("Lugar Algum", Campeonato.Brasileiro.2019$Destino) # retorna as posições de tudo no vetor Campeonato.Brasileiro.2019$Destino que coincide com Lugar Algum
## [1] 15 16
Durante a aula gravada eu me enrolei um pouco na demonstração abaixo. Acontece que Libertadores estava escrito errado, estava escrito Libetadores (sem o r).
grep("Libertadores|Lugar Algum", Campeonato.Brasileiro.2019$Destino) # retorna as posições de tudo no vetor Campeonato.Brasileiro.2019$Destino que coincide com Libetadores ou Lugar Algum
## [1] 1 2 3 4 5 6 7 8 15 16
grep("Lugar Algum", Campeonato.Brasileiro.2019$Destino) # retorna as posições de tudo no vetor Campeonato.Brasileiro.2019$Destino que coincide com Lugar Algum
## [1] 15 16
.2019$Destino[15]<-"lugar algum" #Substitui a 15ª posição por lugar algum" Campeonato.Brasileiro
Execute o comando grep
anterior novamente e veja as diferenças.
Equipes | Jogos | Vitórias | Empates | Derrotas | Gols Pró | Gols Contra | Pontos | Saldo de Gols | Aprov | Destino |
---|---|---|---|---|---|---|---|---|---|---|
Flamengo | 38 | 28 | 6 | 4 | 86 | 37 | 90 | 49 | 79 | Libertadores |
Santos | 38 | 22 | 8 | 8 | 60 | 33 | 74 | 27 | 65 | Libertadores |
Palmeiras | 38 | 21 | 11 | 6 | 61 | 32 | 74 | 29 | 65 | Libertadores |
Grêmio | 38 | 19 | 8 | 11 | 64 | 39 | 65 | 25 | 57 | Libertadores |
Athletico Paranaense | 38 | 18 | 10 | 10 | 51 | 32 | 64 | 19 | 56 | Libertadores |
Săo Paulo | 38 | 17 | 12 | 9 | 39 | 30 | 63 | 9 | 55 | Libertadores |
Internacional | 38 | 16 | 9 | 13 | 44 | 39 | 57 | 5 | 5 | Libertadores |
Corinthians | 38 | 14 | 14 | 10 | 42 | 34 | 56 | 8 | 49 | Libertadores |
Fortaleza | 38 | 15 | 8 | 15 | 50 | 49 | 53 | 1 | 46 | Sulamericana |
Goiás | 38 | 15 | 7 | 16 | 46 | 64 | 52 | -18 | 46 | Sulamericana |
Bahia | 38 | 12 | 13 | 13 | 44 | 43 | 49 | 1 | 43 | Sulamericana |
Vasco da Gama | 38 | 12 | 13 | 13 | 39 | 45 | 49 | -6 | 43 | Sulamericana |
Atlético Mineiro | 38 | 13 | 9 | 16 | 45 | 49 | 48 | -4 | 42 | Sulamericana |
Fluminense | 38 | 12 | 10 | 16 | 38 | 46 | 46 | -8 | 4 | Sulamericana |
Botafogo | 38 | 13 | 4 | 21 | 31 | 45 | 43 | -14 | 38 | lugar algum |
Ceará | 38 | 10 | 9 | 19 | 36 | 41 | 39 | -5 | 34 | Lugar Algum |
Cruzeiro | 38 | 7 | 15 | 16 | 27 | 46 | 36 | -19 | 32 | Rebaixado |
CSA | 38 | 8 | 8 | 22 | 24 | 58 | 32 | -34 | 28 | Rebaixado |
Chapecoense | 38 | 7 | 11 | 20 | 31 | 52 | 32 | -21 | 28 | Rebaixado |
Avaí | 38 | 3 | 11 | 24 | 18 | 62 | 20 | -44 | 18 | Rebaixado |
grep("[L l]ugar [A a]lgum",Campeonato.Brasileiro.2019$Destino) # retorna as posições de tudo no vetor Campeonato.Brasileiro.2019$Destino que coincide com Lugar/lugar ou Algum/algum
## [1] 15 16
str(grep("lugar algum", Campeonato.Brasileiro.2019$Destino))
## int 15
str(grep("Lugar Algum", Campeonato.Brasileiro.2019$Destino)) # mostra a estrutura de um objeto
## int 16
setdiff(grep("lugar algum", Campeonato.Brasileiro.2019$Destino),
grep("Lugar Algum", Campeonato.Brasileiro.2019$Destino)) #Identifica a difença entre X e Y
## [1] 15
setdiff(grep("Lugar Algum", Campeonato.Brasileiro.2019$Destino),
grep("lugar algum", Campeonato.Brasileiro.2019$Destino))
## [1] 16
library(purrr)
##
## Attaching package: 'purrr'
## The following object is masked from 'package:magrittr':
##
## set_names
<- c('spades', 'clubs', 'diamonds', 'hearts')
suits
<- unlist(map(suits, rep, 13))
suit
head(suit)
## [1] "spades" "spades" "spades" "spades" "spades" "spades"
<- c('king', 'queen', 'jack', 'ten', 'nine', 'eight', 'seven', 'six', 'five', 'four', 'three', 'two', 'ace')
faces
<- rep(faces, 4)
face
head(face)
## [1] "king" "queen" "jack" "ten" "nine" "eight"
<- rep(13:1, 4)
value
head(value)
## [1] 13 12 11 10 9 8
<- data.frame(face, suit, value)
deck
head(deck)
## face suit value
## 1 king spades 13
## 2 queen spades 12
## 3 jack spades 11
## 4 ten spades 10
## 5 nine spades 9
## 6 eight spades 8
<- subset(deck, suit == "hearts")
A A
## face suit value
## 40 king hearts 13
## 41 queen hearts 12
## 42 jack hearts 11
## 43 ten hearts 10
## 44 nine hearts 9
## 45 eight hearts 8
## 46 seven hearts 7
## 47 six hearts 6
## 48 five hearts 5
## 49 four hearts 4
## 50 three hearts 3
## 51 two hearts 2
## 52 ace hearts 1
<- subset(deck, face == "ace" )
B B
## face suit value
## 13 ace spades 1
## 26 ace clubs 1
## 39 ace diamonds 1
## 52 ace hearts 1
setdiff(B, A) #Identifica a difença entre X e Y
## $face
## [1] "ace" "ace" "ace" "ace"
##
## $suit
## [1] "spades" "clubs" "diamonds" "hearts"
##
## $value
## [1] 1 1 1 1
.2019$Equipes[1] Campeonato.Brasileiro
## [1] "Flamengo"
grep("Flamengo", Campeonato.Brasileiro.2019$Equipes, value = TRUE)
## [1] "Flamengo"
3.1.3 grepl()
grepl("Flamengo", Campeonato.Brasileiro.2019$Equipes) # Retorna valores lógicos de acordo com o critério estabelecido
## [1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
3.1.4 sub() e gsub()
sub("Fla", "fla", Campeonato.Brasileiro.2019$Equipes) #Substitui Fla por fla naquilo que começa com Fla
## [1] "flamengo" "Santos" "Palmeiras"
## [4] "Grêmio" "Athletico Paranaense" "Săo Paulo"
## [7] "Internacional" "Corinthians" "Fortaleza"
## [10] "Goiás" "Bahia" "Vasco da Gama"
## [13] "Atlético Mineiro" "Fluminense" "Botafogo"
## [16] "Ceará" "Cruzeiro" "CSA"
## [19] "Chapecoense" "Avaí"
gsub("Atlé|Athle", "Atle", Campeonato.Brasileiro.2019$Equipes) #Substitui Atlé ou Athle por Atlé naquilo que contém com Atlé ou Athle
## [1] "Flamengo" "Santos" "Palmeiras"
## [4] "Grêmio" "Atletico Paranaense" "Săo Paulo"
## [7] "Internacional" "Corinthians" "Fortaleza"
## [10] "Goiás" "Bahia" "Vasco da Gama"
## [13] "Atletico Mineiro" "Fluminense" "Botafogo"
## [16] "Ceará" "Cruzeiro" "CSA"
## [19] "Chapecoense" "Avaí"
Alguns elementos especiais podem ser encontrados no R como: Infinito positivo ou negativo (-Inf e Inf), elementos “não número” (NaN - Not a Number) e valores ausentes (NA, Not Available).
3/0
## [1] Inf
-3/0
## [1] -Inf
<-Inf;x x
## [1] Inf
<-(-Inf);y y
## [1] -Inf
0/0
## [1] NaN
Inf-Inf
## [1] NaN
.2019[Campeonato.Brasileiro.2019<=10]<-NA Campeonato.Brasileiro
Equipes | Jogos | Vitórias | Empates | Derrotas | Gols Pró | Gols Contra | Pontos | Saldo de Gols | Aprov | Destino |
---|---|---|---|---|---|---|---|---|---|---|
Flamengo | 38 | 28 | 6 | 4 | 86 | 37 | 90 | 49 | 79 | Libertadores |
Santos | 38 | 22 | 8 | 8 | 60 | 33 | 74 | 27 | 65 | Libertadores |
Palmeiras | 38 | 21 | 11 | 6 | 61 | 32 | 74 | 29 | 65 | Libertadores |
Grêmio | 38 | 19 | 8 | 11 | 64 | 39 | 65 | 25 | 57 | Libertadores |
Athletico Paranaense | 38 | 18 | NA | NA | 51 | 32 | 64 | 19 | 56 | Libertadores |
Săo Paulo | 38 | 17 | 12 | 9 | 39 | 30 | 63 | 9 | 55 | Libertadores |
Internacional | 38 | 16 | 9 | 13 | 44 | 39 | 57 | 5 | 5 | Libertadores |
Corinthians | 38 | 14 | 14 | NA | 42 | 34 | 56 | 8 | 49 | Libertadores |
Fortaleza | 38 | 15 | 8 | 15 | 50 | 49 | 53 | NA | 46 | Sulamericana |
Goiás | 38 | 15 | 7 | 16 | 46 | 64 | 52 | NA | 46 | Sulamericana |
Bahia | 38 | 12 | 13 | 13 | 44 | 43 | 49 | NA | 43 | Sulamericana |
Vasco da Gama | 38 | 12 | 13 | 13 | 39 | 45 | 49 | NA | 43 | Sulamericana |
Atlético Mineiro | 38 | 13 | 9 | 16 | 45 | 49 | 48 | NA | 42 | Sulamericana |
Fluminense | 38 | 12 | NA | 16 | 38 | 46 | 46 | NA | 4 | Sulamericana |
Botafogo | 38 | 13 | 4 | 21 | 31 | 45 | 43 | NA | 38 | lugar algum |
Ceará | 38 | NA | 9 | 19 | 36 | 41 | 39 | NA | 34 | Lugar Algum |
Cruzeiro | 38 | 7 | 15 | 16 | 27 | 46 | 36 | NA | 32 | Rebaixado |
CSA | 38 | 8 | 8 | 22 | 24 | 58 | 32 | NA | 28 | Rebaixado |
Chapecoense | 38 | 7 | 11 | 20 | 31 | 52 | 32 | NA | 28 | Rebaixado |
Avaí | 38 | 3 | 11 | 24 | 18 | 62 | 20 | NA | 18 | Rebaixado |
any(is.na(Campeonato.Brasileiro.2019))
## [1] TRUE
Identificando onde estão os valores que atendem critérios desejados.
which(is.na(Campeonato.Brasileiro.2019), arr.ind=TRUE)
## row col
## [1,] 16 3
## [2,] 5 4
## [3,] 14 4
## [4,] 5 5
## [5,] 8 5
## [6,] 9 9
## [7,] 10 9
## [8,] 11 9
## [9,] 12 9
## [10,] 13 9
## [11,] 14 9
## [12,] 15 9
## [13,] 16 9
## [14,] 17 9
## [15,] 18 9
## [16,] 19 9
## [17,] 20 9
which((Campeonato.Brasileiro.2019<1), arr.ind=TRUE)
## row col
3.2 Operadores
Assista este conteúdo em Cap 2 - Operadores no PVANet
O R tem vários operadores, tais quais outras linguagens, que nos permitem realizar procedimentos aritiméticos, lógicos ou relacionais.
Os operadores aritméticos atuam em 2 elementos (x e y) e retorna respostas lógicas. Estes elementos, pos sua vez, podem ser de modo (mode()
) numéricos ou complexos e também variáveis lógicas.
Símbolo | Operação |
---|---|
+ | adição |
- | subtração |
* | multiplicação |
/ | divisão |
^ | potência |
%% | resto da divisão |
%/% | divisão inteira |
<-2;y<-3
x+y x
## [1] 5
-y x
## [1] -1
*y x
## [1] 6
/x y
## [1] 1.5
%/%x y
## [1] 1
%%x y
## [1] 1
^x y
## [1] 9
Os operadores de comparações atuam em cada elemento de 2 objetos sob comparação (fazendo o recycling se necessário) retornando um objeto do mesmo tamanho.
Símbolo | Relação |
---|---|
< | menor que |
> | maior que |
<= | menor ou igual |
>= | maior ou igual |
== | igual |
!= | diferente |
<-1:3;y<-1:3
x>y x
## [1] FALSE FALSE FALSE
<y x
## [1] FALSE FALSE FALSE
*y x
## [1] 1 4 9
>=x y
## [1] TRUE TRUE TRUE
<=x y
## [1] TRUE TRUE TRUE
==x y
## [1] TRUE TRUE TRUE
!=x y
## [1] FALSE FALSE FALSE
Caso queira comparar bancos de dados completos, por inteiro de uma vez só, utilize identical(x,y)
e all.equal(x,y)
.
identical
faz uma comparação estrita da representação dos objetos e retorna como TRUE
ou FALSE
.
all.equal
compara a “igualdade próxima” e retorna TRUE ou mostra as diferenças.
<-0.9;y<-0.9
xidentical(x,y)
## [1] TRUE
identical(0.9, 1.1 - 0.2)
## [1] FALSE
all.equal(x,y)
## [1] TRUE
all.equal(0.9, 1.1 - 0.2, tolerance = 1e-16)
## [1] "Mean relative difference: 1.233581e-16"
Operadores lógicos são utilizados para para testes lógicos entre 1 ou 2 objetos e retorna valores lógicos também.
Símbolo | Relação |
---|---|
! | Logical NOT |
& | Logical AND |
or | Exclusive OR |
Lembrando que temos outro operadores $, @, [, [[, :, ?, <-, <<-, =, ::
que já começamos a manipular.

Existem dois tipos de pessoas: = & <-
Com o passar do tempo vamos “brincando” com cada operador e, assim, assimilando o que cada uma faz.
3.2.1 Iterações
3.2.1.1 while()
Essa forma de loop é menos comumente usada e potencialmente perigosa, uma vez que ela pode resultar em uma execução descontrolada. Por isso, em muitos casos iterações restritivas são mais adequadas.
A função while()
requer uma condição testável que continuará a resultar em declarações subsequentes a serem executadas até o resultado do teste dar falso (FALSE).
Estrutura:
Começa com a palavra while seguida por parênteses e colchetes while(){}
A segunda parte vai dentro de parênteses e diz respeito a uma expressão lógica e a terceira parte, entre colchetes, o corpo do loop.
while(abc){xyz}
#Se abc for TRUE ele vai executar o resto {xyz}. Depois volta para checar se (abc) continua TRUE ou FALSE para decidir se continua no loop ou parar.
while(condição){
“Código a ser executado”
}
Fonte: Guru99
Exemplo 1: Teste Ter aula na segunda-feira é bom ou não?
while(FALSE){
print("Aula segunda-feira é ótimo!")}
while(TRUE){
print("Aula segunda-feira é ótimo!")}
Exemplo 2: Teste Num concurso de beleza Jackson desafiou qualquer um de seus alunos. Cada um recebeu uma nota.
<-9.5
Jackson<-6
Alunowhile(Aluno<Jackson){
print(Jackson)}
3.2.1.2 for()
É similar ao while()
, mas é mais conveniente na maioria dos casos.
Iterações restritas (loops) destinam-se a execução de um número fixo de vezes dos comandos usando a função for()
.
O loop é executado tantas vezes quanto variam os valores de i.
Começa com a palavra for
seguindo de por parênteses e colchetes – for(){}
.
() não especifica funções lógicas como no while, mas especifica as interações do loop. {} são usados para preencher com os comandos do loop
for(i in conjunto_de_valores){
comandos que serão repetidos
}
Fonte:tutorialspoint
for(i in 1:5){
print("Aula segunda-feira é ótimo!")
}
## [1] "Aula segunda-feira é ótimo!"
## [1] "Aula segunda-feira é ótimo!"
## [1] "Aula segunda-feira é ótimo!"
## [1] "Aula segunda-feira é ótimo!"
## [1] "Aula segunda-feira é ótimo!"
Significa que Aula segunda-feira é ótimo! Será mostrada 5 vezes sempre retornando como o objeto criado i.
for(i in 1:5){
print((i+1)*3)
}
## [1] 6
## [1] 9
## [1] 12
## [1] 15
## [1] 18
Não importa onde você começa ou o tipo de vetor que é (Caractere, número e etc). Basicamente toda vez que mudar ele vai executar o que estiver dentro do corpo do loop.
3.2.2 Condicionais
3.2.2.1 if, else
A função if()
é usado para conduzir uma ou mais declarações contidas dentro de []
, fornecendo a condição dentro de ()
.
Voltando para nosso concurso de beleza, temos um controle um pouco mais inteligente do resultado mostrado.
<-9.5
Jackson<-6
Alunoif(Jackson>Aluno){
print("Jackson é mais bonito que Aluno!")
}
## [1] "Jackson é mais bonito que Aluno!"
if(Aluno*2>=Jackson){
print("Aluno é mais bonito!")
}
## [1] "Aluno é mais bonito!"
Adaptando a o código acima para fazer a declaração condicional FALSE simplesmente retorna nenhum comando no prompt uma vez que o código não disse como R deveria responder nesse caso.
if(Aluno*2>=Jackson^2){
print("Aluno é mais bonito!")
}
Existem 2 métodos de informar ao R como responder em casos onde a declaração de condição é retornada como FALSE: usando o modificador else
ou a função ifelse()
.
Ao contrário de uma função qualquer, else
não pode ser usado independentemente, mas apenas como um modificador (adição) ao if()
. If
no exemplo acima, o resultado é solicitado quando o valor retornado é FALSE, else
pode ser adicionado como segue:
if(Aluno*2>=Jackson^2){
print("A declaração é verdadeira!")
else{
}print("A declaração é falsa!")
}
## [1] "A declaração é falsa!"
Note que else
foi escrito na mesma linha que conclui o if()
para informar ao R que o teste condicional continua.
Podemos retirar a segunda parte do teste anterior e adicionar uma nova comparação.
<-7
Aluno2if(Aluno2>Jackson){
print("Aluno1 é mais bonito!")
else if(Aluno2>Aluno){
}print("Aluno2 é mais bonito que Aluno e menos bonito que Jackson.")
}
## [1] "Aluno2 é mais bonito que Aluno e menos bonito que Jackson."
3.2.2.2 ifelse()
A função ifelse()
é separada de if()
e é formada de uma sintaxe mais simples e concisa. No entanto, ela pode ser usada para gerar o mesmo efeito que nas demonstrações anteriores usando if()
com o modificador else
.
ifelse(Aluno*2>=Jackson^2, "Aluno é mais bonito!", "Jackson é mais bonito!")
## [1] "Jackson é mais bonito!"
Como mostrado acima, o uso de ifelse()
usa a forma:
ifelse(teste condicional, resultado se verdadeiro, resultado se falso)
Declarações condicionais também podem ser aninhadas dentro uma outra. Adaptando o exemplo com o argumento else
um outro teste é executado se o teste inicial é FALSE, onde o secundário é TRUE.
ifelse(Aluno*2>=Jackson^2, "Aluno é mais bonito!",
ifelse(Aluno*2>=Jackson^0.5 ,"Agora o Aluno é mais bonito!", "Aluno continua feio!"))
## [1] "Agora o Aluno é mais bonito!"
Se o teste secundário é ajustado de maneira que os resultados em um teste lógico FALSE, o seguinte resultado é retornado.
ifelse(Aluno*2>=Jackson^2, "Aluno é mais bonito!",
ifelse(Aluno*2>=Jackson^3,"Agora o Aluno é mais bonito!", "Aluno continua feio!"))
## [1] "Aluno continua feio!"
3.3 Dica de leitura
Mello and Peternelli (2013)
Peng (2020b)
Kabacoff (2015)
Venables and Smith (2020)
Neth (2021)
Yamamoto (2020)
Freire (2021b)
Spatial Data Science - Indexing
3.4 Exercícios
- Crie o vetor p que contenham uma sequência de 200 iniciando em 0 aumentando 0.5.
- Eleve o vetor p ao cubo criando o vetor o e multiplique por p.
Organize p por linhas em uma matriz com 10 colunas .
- Crie os elementos
x = 10
ey = 25
. - Mostre na tela A declaração é verdadeira sob a condição de x ser menor que y.
- Mostre 2 maneiras condicionais de executar a declaração na qual mostraria A declaração é correta se x é menor ou igual a y, ou caso contrário mostre A declaração é incorreta se não for o caso.
- Atribua
z = 50
e construa uma funçãoifelse()
que testa se x é maior que y, mostrando true se a condição é encontrada. Aninhe dentro disso uma segunda condição que mostre uma verdadeira, uma falsa ou ambas falsas caso x seja maior que z. - Use uma iteração restrita para gerar uma sequência de números de 1 até 20.
- Use iteração restrita para conduzir o cálculo
(i^2)-i
, onde i vai de 5 até 10. - Use interação não restrita para gerar uma sequência de inteiros de -10 até -20.