1 Introdução ao R.


1.1 O que é?

  • Software livre para análise e manipulação de dados.

2 A Função setwd.

  • Seleciona o diretório em que estão os arquivos necessários para serem trabalhados.

  • Facilita a importação dos dados.

  • Para selecionar o diretório, utilize uma das opções abaixo:
    • Usar o comando setwd(“~/Nome do diretório”) ou
    • Ir em Session -> Set Working Directory -> Choose Directory -> e escolha o diretório ou
    • Utilizar o atalho Ctrl+Shift+H e selecionar o diretório.

3 Usando o R como uma calculadora.


3.1 Símbolos para operações

Operação Símbolo
Soma (+)
Subtração (-)
Multiplicação (*)
Divisão (/)
Raiz quadrada (sqrt())
Fatorial (factorial())
Exponencial (exp())
Expoente (^)

4 Criando Vetores.

x <- c(1,2,3,4,5,6,7,8)
y <- seq(1:20)
z <- rep("a", 20)
t <- runif(12, 3, 4)

Sequência de números inteiros de 1 a 8

x
## [1] 1 2 3 4 5 6 7 8

Sequência de números inteiros de 1 a 20

y 
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

Letra ‘a’ repetida 20 vezes

z 
##  [1] "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a"
## [18] "a" "a" "a"

Geração de 12 números aleatórios da distribuição uniforme de probabilidade no intervalo [3,4]

t 
##  [1] 3.057833 3.602260 3.155815 3.289124 3.020876 3.431231 3.877524
##  [8] 3.389077 3.996924 3.329390 3.273500 3.342575
  • No R existem cinco classes para vetores:
    • Character
    • Numeric
    • Integer
    • Logical
    • Complex
character <- c ("a", "b", "c")
class(character) # Exibe a classe do vetor 'character'
## [1] "character"
numerico <- c(1,2,3)
class(numerico) # Exibe a classe do vetor 'numerico' 
## [1] "numeric"
inteiro <- c(1L, 2L, 3L)
class(inteiro) # Exibe a classe do vetor 'inteiro'
## [1] "integer"
logica <- c(TRUE, FALSE, TRUE)
class(logica) # Exibe a classe do vetor 'logica'
## [1] "logical"
complexo <- c(1+3i, 2+4i)
class(complexo) # Exibe a classe do vetor 'complexo'
## [1] "complex"
  • OBS: Um mesmo vetor pode conter apenas elementos da mesma classe.
charanum <- c(rep("a", 5), seq(1:5)) # Transforma os números em caracteres
charanum
##  [1] "a" "a" "a" "a" "a" "1" "2" "3" "4" "5"
  • É possível “forçar” um vetor a mudar de classe com alguns comandos.
as.integer(numerico) ## Transforma a classe 'numeric' em 'integer'
## [1] 1 2 3
as.character(numerico) ## Transforma a classe 'numeric' em 'character'
## [1] "1" "2" "3"
as.logical(inteiro) ## Transforma a classe 'integer' em 'logical'
## [1] TRUE TRUE TRUE

5 Algumas funções


5.1 Sorteando números aleatórios em um intervalo.

  • runif(quantidade de números, número mínimo, número máximo)
runif(n= 10, min = 5, max= 8) # Geração de 10 números aleatórios da distribuição uniforme de probabilidade no intervalo [5,8] 
##  [1] 7.460861 5.908680 7.266937 5.594205 5.314490 7.977185 7.427804
##  [8] 5.848979 6.389169 5.191438
runif(10, 5 , 8) ## Se ordenado, não é necessário nomear
##  [1] 7.431716 6.977663 7.279631 5.033652 5.759149 7.086464 7.345305
##  [8] 6.871012 5.283093 5.078223
runif(8, n= 10, min= 5) ## Se mudar a ordem, é necessário especificar os argumentos
##  [1] 5.509023 5.629108 5.753583 5.022719 7.429412 7.837095 5.032406
##  [8] 6.180044 7.652689 7.959781

5.2 Criando uma sequência de números e repetições.

  • Pra criar uma sequência de números use a função seq()

  • Use o a função rep() para gerar uma repetição pré estabelecida de números, caracteres, argumentos lógicos, entre outros.

seq(1:20) # Sequência de números inteiros de 1 a 20
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
seq(-30,30) # Sequência de números inteiros de -30 a 30
##  [1] -30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14
## [18] -13 -12 -11 -10  -9  -8  -7  -6  -5  -4  -3  -2  -1   0   1   2   3
## [35]   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20
## [52]  21  22  23  24  25  26  27  28  29  30
seq(-30,30, by= 2) # Sequência de números inteiros de -30 a 30 com variação de 2 unidades
##  [1] -30 -28 -26 -24 -22 -20 -18 -16 -14 -12 -10  -8  -6  -4  -2   0   2
## [18]   4   6   8  10  12  14  16  18  20  22  24  26  28  30
rep(TRUE, 14) # Argumento lógico 'TRUE' repetido 14 vezes
##  [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
rep("a", 6) # Letra 'a' repetida 6 vezes
## [1] "a" "a" "a" "a" "a" "a"
rep(1:4, each= 2, len= 4)
## [1] 1 1 2 2
rep(1:4, each= 1, times= 3)
##  [1] 1 2 3 4 1 2 3 4 1 2 3 4
  • Para ver a documentaçao de uma função dentro do R, basta utilizar o comando:
    • ?(Nome da função)
    • Por exemplo : ?runif, ?rpois, ?data.frame …

6 Criando funções.

  • Além de análise e manipulação de dados, o R também permite que se possa criar funções para diversos fins. Aqui podem ser feitos alguns exemplos.
imprimir.texto <- function(texto){
    writeLines(texto)
}
imprimir.texto("Ministrando curso R")
## Ministrando curso R
soma <- function(x,y){
   sum(x,y)
}
soma(2,3)
## [1] 5

7 Gerenciando área de trabalho

Algumas funções podem facilitar ações em sua área de trabalho. A tabela abaixo mostra alguns comandos extremamente importantes e úteis.

Comando O que faz.
ls() lista os objetos criados até o momento
rm() Remove um objeto especifico
rm(x,y) Remove mais de um objeto
rm(list=ls) Remove todos os objetos criados

8 Valores perdidos NA´S

Para valores perdidos, nomeamos como NA, e existem algumas formas de encontrarmos esse valores.

qqwer <- c (3, 4 , rep(NA, 3)) ## Criação de um vetor com números e valores perdidos
qqwer
## [1]  3  4 NA NA NA
is.na(qqwer) ## Mostra onde estão os NA´s no seu objeto
## [1] FALSE FALSE  TRUE  TRUE  TRUE
any(is.na(qqwer)) ## Retorna se há ao menos um NA no objeto
## [1] TRUE
  • Também há valores indeterminados(NAN), e valores impossivéis (INF)
0/0
## [1] NaN
1/0
## [1] Inf

9 Matriz

  • Só pode conter um dos dois tipos de informação
    • Números
    • Caracteres
  • Eficiente para se trabahar tanto com linhas quanto colunas.
  • Utilizar a função matrix()

9.1 Criando uma matriz

Preenchimento por colunas

matriz <- matrix(1:4, nrow= 2, ncol= 2) ## matriz númerica
matriz
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
re <- c(rep("a",2), rep("b",2))
matriz2 <- matrix(re, nrow = 2, ncol = 2)## Matriz caracter
matriz2
##      [,1] [,2]
## [1,] "a"  "b" 
## [2,] "a"  "b"

Preenchimento por linhas

matriz <- matrix(1:4, nrow= 2, ncol= 2, byrow = TRUE)
matriz
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
matriz2 <- matrix(re, nrow = 2, ncol = 2, byrow = TRUE)
matriz2
##      [,1] [,2]
## [1,] "a"  "a" 
## [2,] "b"  "b"

É fácil adicionarmos uma nova linha a uma matriz existente

rbind(matriz, c(1,2))
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
## [3,]    1    2
rbind(matriz2, c("c", "d"))
##      [,1] [,2]
## [1,] "a"  "a" 
## [2,] "b"  "b" 
## [3,] "c"  "d"

Semelhante para adicionarmos colunas

cbind(matriz, c(1.2))
##      [,1] [,2] [,3]
## [1,]    1    2  1.2
## [2,]    3    4  1.2
cbind(matriz2, c("c", "d"))
##      [,1] [,2] [,3]
## [1,] "a"  "a"  "c" 
## [2,] "b"  "b"  "d"

É possível transformar um vetor em uma matriz

vetor <- c(1,2,3,4) ## Criação de um vetor com números
dim(vetor) <- c(2,2) ## Alterar a dimensão do vetor
vetor
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
class(vetor) ## Exibe a classe do vetor
## [1] "matrix"

OBS: Operações matemáticas com matrizes são possíveis e seguem as mesmas regras.

matriz * matriz
##      [,1] [,2]
## [1,]    1    4
## [2,]    9   16
matriz + matriz
##      [,1] [,2]
## [1,]    2    4
## [2,]    6    8
matriz %*% matriz
##      [,1] [,2]
## [1,]    7   10
## [2,]   15   22

9.2 Nomeando as linhas e colunas da matriz

rownames(matriz)<- c("LINHA1", "LINHA2")
matriz
##        [,1] [,2]
## LINHA1    1    2
## LINHA2    3    4
colnames(matriz2) <- c("COLUNA1", "COLUNA2")
matriz2
##      COLUNA1 COLUNA2
## [1,] "a"     "a"    
## [2,] "b"     "b"

10 Listas

  • Permite armazenar mais de uma classe de objetos.
  • Considerada uma classe especial de vetor.
  • Utilizar a função list()

10.1 Criando listas

lista <- list(Brasil= c("verde", "amarelo"), Números= c(1:10), Lógico= c(TRUE, FALSE, FALSE)) ## Criação de uma lista
lista ## Exibe a lista
## $Brasil
## [1] "verde"   "amarelo"
## 
## $Números
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## $Lógico
## [1]  TRUE FALSE FALSE
class(lista) ## Exibe a classe da lista
## [1] "list"
length(lista) ## Exibe o comprimento da lista
## [1] 3
str(lista) ## Mostra toda a documentação da lista (IMPORTANTE)
## List of 3
##  $ Brasil : chr [1:2] "verde" "amarelo"
##  $ Números: int [1:10] 1 2 3 4 5 6 7 8 9 10
##  $ Lógico : logi [1:3] TRUE FALSE FALSE
  • Também podemos adicionar novos itens a uma lista existente
lista$Carros <- c("Gol", "Celta", "BMW")
lista
## $Brasil
## [1] "verde"   "amarelo"
## 
## $Números
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## $Lógico
## [1]  TRUE FALSE FALSE
## 
## $Carros
## [1] "Gol"   "Celta" "BMW"

11 Data Frame

  • Lista vários vetores de mesmo comprimento(Obrigatório)
  • Assim como as listas podem conter várias classes.
  • Utilizar a função data.frame()

11.1 Criando um Data Frame

dataframe <- data.frame(Números= c(32:41),
                        Sexo= c(rep("Homem", 5), rep("Mulher", 5)))
dataframe ## Exibe o dataframe
##    Números   Sexo
## 1       32  Homem
## 2       33  Homem
## 3       34  Homem
## 4       35  Homem
## 5       36  Homem
## 6       37 Mulher
## 7       38 Mulher
## 8       39 Mulher
## 9       40 Mulher
## 10      41 Mulher
class(dataframe) ## Exibe a classe do dataframe
## [1] "data.frame"
str(dataframe) ## Exibe a estrutura do dataframe
## 'data.frame':    10 obs. of  2 variables:
##  $ Números: int  32 33 34 35 36 37 38 39 40 41
##  $ Sexo   : Factor w/ 2 levels "Homem","Mulher": 1 1 1 1 1 2 2 2 2 2
  • Vamos adicionar uma nova coluna
dataframe$logica <- rep(TRUE, 10)
dataframe ## Exibe o dataframe com mais uma coluna
##    Números   Sexo logica
## 1       32  Homem   TRUE
## 2       33  Homem   TRUE
## 3       34  Homem   TRUE
## 4       35  Homem   TRUE
## 5       36  Homem   TRUE
## 6       37 Mulher   TRUE
## 7       38 Mulher   TRUE
## 8       39 Mulher   TRUE
## 9       40 Mulher   TRUE
## 10      41 Mulher   TRUE

11.2 Nomenado linhas e colunas

  • É possivel como visto acima, nomear as colunas dentro da prória função, mas se for necessário alterar o nome basta usar o argumento colnames()
  • Para nomear uma linha de um data frame, utilizamos rownames()
rownames(dataframe) <- paste0("linha",1:10) # Altera o nome das linhas do dataframe
dataframe
##         Números   Sexo logica
## linha1       32  Homem   TRUE
## linha2       33  Homem   TRUE
## linha3       34  Homem   TRUE
## linha4       35  Homem   TRUE
## linha5       36  Homem   TRUE
## linha6       37 Mulher   TRUE
## linha7       38 Mulher   TRUE
## linha8       39 Mulher   TRUE
## linha9       40 Mulher   TRUE
## linha10      41 Mulher   TRUE
colnames(dataframe) <- c("Números2", "Sexo2", "logica2") # Altera o nome das colunas do dataframe
dataframe
##         Números2  Sexo2 logica2
## linha1        32  Homem    TRUE
## linha2        33  Homem    TRUE
## linha3        34  Homem    TRUE
## linha4        35  Homem    TRUE
## linha5        36  Homem    TRUE
## linha6        37 Mulher    TRUE
## linha7        38 Mulher    TRUE
## linha8        39 Mulher    TRUE
## linha9        40 Mulher    TRUE
## linha10       41 Mulher    TRUE