1. Noções básicas 1

1.1 Primeiros passos - aritmética no R

# Adição
3 + 5
## [1] 8
# Subtração
5 - 3
## [1] 2
# Multiplicação
3 * 4
## [1] 12
# Divisão
4 / 2
## [1] 2
# Exponenciação
2^4
## [1] 16
# Módulo
7%%3
## [1] 1

1.2 Atribuição e operações com variáveis

economia <- 200

# imprime o valor de economia no console
economia
## [1] 200
meu_dinheiro <- 100
seu_dinheiro <- 200

# Adiciona os 'dinheiros' e salva na variável 'nosso_dinheiro'
(nosso_dinheiro <- meu_dinheiro + seu_dinheiro)
## [1] 300

1.3 Cálculo de retornos financeiros

# caixa inicial e 5% de retorno em janeiro
caixa_inicial <- 200
ret_jan <- 0.05  # utilize pontos, não vírgulas, para números decimais
indice_jan <- 1 + ret_jan

# qual é o caixa ao final do mês?
(pos_caixa_jan <- caixa_inicial * indice_jan)
## [1] 210
# retorno de fevereiro = 4.5%
ret_fev <- 4.5/100
indice_fev <- 1 + ret_fev

# caixa total ao final dos dois meses
caixa_total <- caixa_inicial * indice_jan * indice_fev
caixa_total
## [1] 219.45

1.4 Tipos de dados

# O valor da ação da Apple é 'numeric'
apple_stock <- 208.38

# Credit ratings é um 'string'
credit_rating <- "AAA"

# Você gosta do mercado de capitais? TRUE ou FALSE?
resposta <- TRUE
resposta
## [1] TRUE

2. Vetores e matrizes

2.1 c()ombine

Combinando elementos.

# Um vetor numérico
AMBEV_stock <- c(14.16, 14.19, 13.824)

# Um vetor de caracteres
financas <- c("ações", "Fundos", "Carteiras")

# Um vetor lógico
logico <- c(TRUE, FALSE, TRUE)

2.2 Nomeando vetores

# vetor com 12 meses de retorno e nomes dos meses
ret <- c(5, 2, 3, 7, 8, 3, 5, 9, 1, 4, 6, 3)
meses <- c("Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez")

# Adiciona os nomes ao vetor ret
names(ret) <- meses

# veja como ficou
ret
## Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez 
##   5   2   3   7   8   3   5   9   1   4   6   3

2.3 Visualizando o vetor

# Gráfico dos pontos
plot(ret, col = 'blue')

2.4 Média ponderada associada a um vetor

# Pesos e retornos
ret_microsoft <- 7/100
ret_sony <- 9/100
peso_microsoft <- .2
peso_sony <- .8

# Retorno da carteira
(ret_carteira <- ret_microsoft * peso_microsoft + ret_sony * peso_sony)
## [1] 0.086
# Pesos, retornos e nomes das companhias
ret_comp <- c(ret_microsoft, ret_sony)
pesos <- c(peso_microsoft, peso_sony)
companhias <- c("Microsoft", "Sony")

# Dê nomes aos dados nos vetores
names(ret_comp) <- companhias
names(pesos) <- companhias

# Multiplique os vetores 
retxpesos <- ret_comp*pesos
retxpesos
## Microsoft      Sony 
##     0.014     0.072
# Some para obter o retorno da carteira
(ret_carteira <- sum(retxpesos))
## [1] 0.086

2.5 Partição de vetores

ret 
## Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez 
##   5   2   3   7   8   3   5   9   1   4   6   3
ret[1:6]
## Jan Fev Mar Abr Mai Jun 
##   5   2   3   7   8   3
# Somente março e maio
meses1 <- c("Mar", "Mai")

ret[meses1]
## Mar Mai 
##   3   8
# Omitindo o primeiro mês
ret[-1]
## Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez 
##   2   3   7   8   3   5   9   1   4   6   3
## Sony 
 
class("Mai")
## [1] "character"

2.6 Criando uma matriz

meu_vetor <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)

# matrix 3x3 
minha_matriz <- matrix(data = meu_vetor, nrow = 3, ncol = 3)
minha_matriz
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
# Usando byrow = TRUE
matrix(data = c(2, 3, 4, 5), nrow = 2, ncol = 2, byrow = TRUE)
##      [,1] [,2]
## [1,]    2    3
## [2,]    4    5

2.7 Como juntar vetores para formar uma matriz

apple <- c(109.49, 109.90, 109.11, 109.95, 111.03)
ibm <- c(159.82, 160.02, 159.84, 160.35, 164.79)
micr <- c(59.20, 59.25, 60.22, 59.95, 61.37)

# cbind (como colunas) os vetores
cbind_acoes <- cbind(apple, ibm, micr)
cbind_acoes
##       apple    ibm  micr
## [1,] 109.49 159.82 59.20
## [2,] 109.90 160.02 59.25
## [3,] 109.11 159.84 60.22
## [4,] 109.95 160.35 59.95
## [5,] 111.03 164.79 61.37
# rbind (por linhas) os vetores
rbind_acoes <- rbind(apple, ibm, micr)
rbind_acoes
##         [,1]   [,2]   [,3]   [,4]   [,5]
## apple 109.49 109.90 109.11 109.95 111.03
## ibm   159.82 160.02 159.84 160.35 164.79
## micr   59.20  59.25  60.22  59.95  61.37

2.8 Visualizando a matriz

# Define matrix
apple_micr_matrix <- cbind(apple, micr)
apple_micr_matrix
##       apple  micr
## [1,] 109.49 59.20
## [2,] 109.90 59.25
## [3,] 109.11 60.22
## [4,] 109.95 59.95
## [5,] 111.03 61.37
# Gráfico de dispersão de Microsoft vs Apple
plot(apple_micr_matrix, main = 'Microsoft vs Apple', col = "red")

2.9 cor()relação

Visualizando a correlação dos dados.

# Correlação entre Apple e IBM
cor(apple, ibm)
## [1] 0.9131575
# matriz de ações
acoes <- cbind(apple, micr, ibm)
dim(acoes)
## [1] 5 3
# cor() das três ações
cor(acoes)
##           apple      micr       ibm
## apple 1.0000000 0.6675003 0.9131575
## micr  0.6675003 1.0000000 0.8741410
## ibm   0.9131575 0.8741410 1.0000000

2.10 ‘Subsetting’ uma matriz

Apresentando algumas linhas e colunas.

# Terceira linha
acoes[3,]
##  apple   micr    ibm 
## 109.11  60.22 159.84
# Quarta e quinta linha da coluna ibm
acoes[4:5, "ibm"]
## [1] 160.35 164.79
# Todas as linhas das Colunas 'apple' e 'micr'
acoes [, c("apple","micr")]
##       apple  micr
## [1,] 109.49 59.20
## [2,] 109.90 59.25
## [3,] 109.11 60.22
## [4,] 109.95 59.95
## [5,] 111.03 61.37
acoes[]
##       apple  micr    ibm
## [1,] 109.49 59.20 159.82
## [2,] 109.90 59.25 160.02
## [3,] 109.11 60.22 159.84
## [4,] 109.95 59.95 160.35
## [5,] 111.03 61.37 164.79

3. Data Frames

3.1 Criando o primeiro data.frame()

# Variáveis
companhias <- c("A", "A", "A", "B", "B", "B", "B")
fluxo_caixa <- c(1000, 4000, 550, 1500, 1100, 750, 6000)
ano <- c(1, 3, 4, 1, 2, 4, 5)

# Data frame
caixa <- data.frame(companhias, fluxo_caixa, ano)

caixa
str(caixa)
## 'data.frame':    7 obs. of  3 variables:
##  $ companhias : chr  "A" "A" "A" "B" ...
##  $ fluxo_caixa: num  1000 4000 550 1500 1100 750 6000
##  $ ano        : num  1 3 4 1 2 4 5

3.2 heads e tails de seus dados com estrutura

# `head()` mostra as primeiras quatro linhas (padrão)
head(caixa, 4)
# `tail(, 3)` mostra as últimas três linhas
tail(caixa, 3)
# `str()` e a estrutura de seus dados
str(caixa)
## 'data.frame':    7 obs. of  3 variables:
##  $ companhias : chr  "A" "A" "A" "B" ...
##  $ fluxo_caixa: num  1000 4000 550 1500 1100 750 6000
##  $ ano        : num  1 3 4 1 2 4 5

3.3 Nomeando linhas / colunas

novosNomes <- c("companhia", "fluxo_caixa", "ano")

colnames(caixa) <- novosNomes

colnames(caixa)
## [1] "companhia"   "fluxo_caixa" "ano"

3.4 Acessando e “fatiando” um data frames

# Terceira linha, segunda coluna
caixa[3, 2]
## [1] 550
# Quinta linha da coluna 'ano' 
caixa[5, 'ano']
## [1] 2
# coluna 'ano'
caixa[, "ano"]
## [1] 1 3 4 1 2 4 5
# Seleciona a coluna "fluxo_caixa" e multiplica por 2
caixa[, "fluxo_caixa"] * 2
## [1]  2000  8000  1100  3000  2200  1500 12000
# Linhas da companhia B
subset(caixa, companhia == "B")
# Linhas com fluxo de caixa vencendo em 1 ano
subset(caixa, ano == '1')

3.5 Adicionando colunas

# cenário trimestral
caixa$trimestre <- caixa$fluxo_caixa * 0.25
caixa
# Cenário bi-anual

caixa$dois_anos <- caixa$ano * 2
caixa
caixa$dois_anos <- 2
caixa

3.6 Valor presente de fluxo de caixa projetado

# Valor presente de $4000 em 3 anos a 5% a.a.
juros <- 5/100
anos <- 3

fluxo_caixa <- 4000

VP <- fluxo_caixa  * (1 + juros) ^ -anos
VP
## [1] 3455.35
caixa$vp <- caixa$fluxo_caixa  * (1 + juros) ^ -caixa$ano

caixa
# VP Total
(total_pv <- sum(caixa$vp))
## [1] 12604.71
# Informação da companhia B
(caixa_B <- subset(caixa, companhia == "B"))
# VP Total de B
(total_vp_B <- sum(caixa_B$vp))
## [1] 7744.488

4. Fatores

4.1 Criando fatores

# credit_rating - vetor de caracteres
credit_rating <- c("BB", "AAA", "AA", "CCC", "AA", "AAA", "B", "BB")

# Transformando em fator
credit_factor <- factor(credit_rating, 
                        levels = c("CC", "CCC", "B", "BB", "AA", "AAA"),
                        ordered = TRUE)

credit_factor
## [1] BB  AAA AA  CCC AA  AAA B   BB 
## Levels: CC < CCC < B < BB < AA < AAA
str(credit_rating)
##  chr [1:8] "BB" "AAA" "AA" "CCC" "AA" "AAA" "B" "BB"
str(credit_factor)
##  Ord.factor w/ 6 levels "CC"<"CCC"<"B"<..: 4 6 5 2 5 6 3 4

4.2 Níveis (levels) de fatores

# Identifique níveis únicos
levels(credit_factor)
## [1] "CC"  "CCC" "B"   "BB"  "AA"  "AAA"
# Renomeie os níveis
levels(credit_factor) <- c("2C", "3C", "1B", "2B", "2A", "3A")

credit_factor
## [1] 2B 3A 2A 3C 2A 3A 1B 2B
## Levels: 2C < 3C < 1B < 2B < 2A < 3A
summary(credit_rating)
##    Length     Class      Mode 
##         8 character character
summary(credit_factor)
## 2C 3C 1B 2B 2A 3A 
##  0  1  1  2  2  2

4.3 Visualizando os fatores

plot(credit_factor)

4.4 Transformando uma variável numérica em um fator (codificando)

# Defina rankings AAA.
AAA_rank <- c(31,  48, 100, 53, 85, 73, 62, 74, 42, 38, 97, 61, 48, 86, 44, 9, 43, 18,  62,
              38, 23, 37, 54, 80, 78, 93, 47, 100, 22,  22, 18, 26, 81, 17, 98, 4,  83, 5,
              6,  52, 29, 44, 50, 2,  25, 19, 15, 42, 30, 27)

# Crie 4 "buckets" para AAA_rank usando cut()
AAA_factor <- cut(x = AAA_rank, breaks = c(0, 25, 50, 75, 100))

# Renomeie os níveis 
niveis <- c("baixo", "médio", "alto", "muito alto")

levels(AAA_factor) <- niveis

AAA_factor
##  [1] médio      médio      muito alto alto       muito alto alto      
##  [7] alto       alto       médio      médio      muito alto alto      
## [13] médio      muito alto médio      baixo      médio      baixo     
## [19] alto       médio      baixo      médio      alto       muito alto
## [25] muito alto muito alto médio      muito alto baixo      baixo     
## [31] baixo      médio      muito alto baixo      muito alto baixo     
## [37] muito alto baixo      baixo      alto       médio      médio     
## [43] médio      baixo      baixo      baixo      baixo      médio     
## [49] médio      médio     
## Levels: baixo médio alto muito alto
plot(AAA_factor)

4.5 Criando fatores ordenados

# Use unique() para encontrar valores únicos
unique(credit_rating)
## [1] "BB"  "AAA" "AA"  "CCC" "B"
# Crie fatores ordenados
credit_factor_ordenado <- factor(credit_rating, ordered = TRUE, levels = c("AAA", "AA", "BB", "B", "CCC"))

# Gráfico de credit_factor_ordenado
plot(credit_factor_ordenado)

4.6 Subsetting um fator

# Remova o nível A da posição 3 sem retirá-lo da variável original.
credit_factor
## [1] 2B 3A 2A 3C 2A 3A 1B 2B
## Levels: 2C < 3C < 1B < 2B < 2A < 3A
(novos_niveis <- credit_factor[-3])
## [1] 2B 3A 3C 2A 3A 1B 2B
## Levels: 2C < 3C < 1B < 2B < 2A < 3A
plot(novos_niveis)

# Remova o nível A das posições 3 e 7 os retirando da variável original.
novos_niveis_2 <- credit_factor[c(-3,-7), drop = TRUE]
novos_niveis_2
## [1] 2B 3A 3C 2A 3A 2B
## Levels: 3C < 2B < 2A < 3A
plot(novos_niveis_2)

4.7 stringsAsFactors

Uma melhor organização dos dados.

# Variáveis
credit_rating <- c("AAA", "A", "BB")
donos_titulos <- c("Zé", "Maria", "Gisele")

# Crie o data frame com vetores de caracter, os títulos
titulos <- data.frame(credit_rating, donos_titulos, stringsAsFactors = FALSE)
str(titulos)
## 'data.frame':    3 obs. of  2 variables:
##  $ credit_rating: chr  "AAA" "A" "BB"
##  $ donos_titulos: chr  "Zé" "Maria" "Gisele"
# Crie uma coluna de fatores
titulos$credit_factor <- factor(titulos$credit_rating, ordered = TRUE, levels = c("AAA","A","BB"))
str(titulos)
## 'data.frame':    3 obs. of  3 variables:
##  $ credit_rating: chr  "AAA" "A" "BB"
##  $ donos_titulos: chr  "Zé" "Maria" "Gisele"
##  $ credit_factor: Ord.factor w/ 3 levels "AAA"<"A"<"BB": 1 2 3

5. Listas

5.1 Criando uma lista

# Componentes da lista
nome <- "Apple e IBM"
apple <- c(109.49, 109.90, 109.11, 109.95, 111.03)
ibm <- c(159.82, 160.02, 159.84, 160.35, 164.79)
matriz_cor <- cor(cbind(apple, ibm))

# Crie a lista
carteira <- list(nome, apple, ibm, matriz_cor)

carteira
## [[1]]
## [1] "Apple e IBM"
## 
## [[2]]
## [1] 109.49 109.90 109.11 109.95 111.03
## 
## [[3]]
## [1] 159.82 160.02 159.84 160.35 164.79
## 
## [[4]]
##           apple       ibm
## apple 1.0000000 0.9131575
## ibm   0.9131575 1.0000000

5.2 Listas nomeadas

names(carteira) <- c("nome", "apple", "ibm", "correlacao")

carteira
## $nome
## [1] "Apple e IBM"
## 
## $apple
## [1] 109.49 109.90 109.11 109.95 111.03
## 
## $ibm
## [1] 159.82 160.02 159.84 160.35 164.79
## 
## $correlacao
##           apple       ibm
## apple 1.0000000 0.9131575
## ibm   0.9131575 1.0000000

5.3 Accesse os elements da lista

# Segundo e terceiro elementos da carteira
carteira[c(2,3)]
## $apple
## [1] 109.49 109.90 109.11 109.95 111.03
## 
## $ibm
## [1] 159.82 160.02 159.84 160.35 164.79
# Use $ para obter as correlações
options(digits = 4)
carteira$correlacao
##        apple    ibm
## apple 1.0000 0.9132
## ibm   0.9132 1.0000

5.4 Adicionando elementos à lista

# Adicione pesos: 20% Apple, 80% IBM
carteira$peso <- c(apple = .20, ibm = .80)

carteira
## $nome
## [1] "Apple e IBM"
## 
## $apple
## [1] 109.5 109.9 109.1 110.0 111.0
## 
## $ibm
## [1] 159.8 160.0 159.8 160.3 164.8
## 
## $correlacao
##        apple    ibm
## apple 1.0000 0.9132
## ibm   0.9132 1.0000
## 
## $peso
## apple   ibm 
##   0.2   0.8
# Altere os pesos: 30% Apple, 70% IBM
carteira$peso <- c(apple = .30, ibm = .70)

carteira
## $nome
## [1] "Apple e IBM"
## 
## $apple
## [1] 109.5 109.9 109.1 110.0 111.0
## 
## $ibm
## [1] 159.8 160.0 159.8 160.3 164.8
## 
## $correlacao
##        apple    ibm
## apple 1.0000 0.9132
## ibm   0.9132 1.0000
## 
## $peso
## apple   ibm 
##   0.3   0.7

5.5 Removendo elementos de uma lista

# Remova os preços da ação da Microsoft da carteira
carteira$microsoft <- NULL

5.6 Dividindo os dados com split()

# Defina o grupo a partir do ano
grupo <- caixa$ano

# Separe a caixa com os novos grupos
caixa_div <- split(caixa, grupo)

caixa_div
## $`1`
##   companhia fluxo_caixa ano trimestre dois_anos     vp
## 1         A        1000   1       250         2  952.4
## 4         B        1500   1       375         2 1428.6
## 
## $`2`
##   companhia fluxo_caixa ano trimestre dois_anos    vp
## 5         B        1100   2       275         2 997.7
## 
## $`3`
##   companhia fluxo_caixa ano trimestre dois_anos   vp
## 2         A        4000   3      1000         2 3455
## 
## $`4`
##   companhia fluxo_caixa ano trimestre dois_anos    vp
## 3         A         550   4     137.5         2 452.5
## 6         B         750   4     187.5         2 617.0
## 
## $`5`
##   companhia fluxo_caixa ano trimestre dois_anos   vp
## 7         B        6000   5      1500         2 4701
# Junte de volta os dados
caixa_original <- unsplit(caixa_div, grupo)

caixa_original

5.7 Atributos

Como dar atributos aos dados.

matriz <- matrix(c(1,2,3,4,5,6), nrow = 2, ncol = 3)
rownames(matriz) <- c("Linha1", "Linha2")
colnames(matriz) <- c("Col1", "Col2", "Col3")
matriz
##        Col1 Col2 Col3
## Linha1    1    3    5
## Linha2    2    4    6
fator <- factor(c("A", "A", "B"), ordered = TRUE, levels = c("A", "B"))

# atributos da variável matriz
attributes(matriz)
## $dim
## [1] 2 3
## 
## $dimnames
## $dimnames[[1]]
## [1] "Linha1" "Linha2"
## 
## $dimnames[[2]]
## [1] "Col1" "Col2" "Col3"
# dimensão de 'matriz' 
attr(matriz, "dim")
## [1] 2 3
dim(matriz) # mais simples
## [1] 2 3
# atributes de 'fator'
attributes(fator)
## $levels
## [1] "A" "B"
## 
## $class
## [1] "ordered" "factor"

Voltando para a Visualização de gráficos no R - item 1.4

Clique aqui, se estiver utiizando a versão WEB deste arquivo.


  1. O conteúdo deste documento se baseia livremente em notas do curso Introduction to R for Finance do Datacamp.↩︎