Análise de Dados em R (FNDE) - Módulo 1

Sessão 3 - Criação e Manipulação de Objetos no R

Allan Vieira
janeiro de 2018

Objetivos desta Sessão


  • Conhecer os principais objetos utilizados no R;

  • Manipular esses objetos.

  • OBS: há algumas regras para atribuir nomes aos objetos no R.

Conceituação



  • Tudo (ou quase tudo) no R são objetos !

  • Objetos: vetores, matrizes, dataframes, listas e funções.

Vetores - Definição



  • são arrays unidimensionais (sequências unidimensionais);

  • tipos: numéricos, strings, expressões lógicas;

  • OBS: os elementos só podem ser de um único tipo.

Vetores - Exemplo

Vetor numérico:

[1] 5.1 4.9 4.7 4.6 5.0 5.4

Vetor de strings:

 [1] "R"    "FNDE" "R"    "FNDE" "R"    "FNDE" "R"    "FNDE" "R"    "FNDE"
[11] "R"    "FNDE" "R"    "FNDE" "R"    "FNDE" "R"    "FNDE" "R"    "FNDE"
  • Atenção: Strings são declaradas com aspas duplas OU simples; output será sempre com aspas dupla.

Vetor lógico:

 [1]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE

Matrizes - Definição



  • são arrays Bidimensionais, com coleção de vetores (linhas ou colunas) do mesmo tipo;

  • tipos: numéricos, strings, expressões lógicas;

  • OBS: todos os vetores da coleção são do mesmo tipo e tamanho.

Matrizes - Exemplo

Matriz numérica:

          [,1]       [,2]
[1,] 0.9453489 0.05102219
[2,] 0.8881304 0.42832298



Matriz de strings:

     [,1]   [,2]  
[1,] "R"    "FNDE"
[2,] "FNDE" "R"   
[3,] "R"    "FNDE"
[4,] "FNDE" "R"   
[5,] "R"    "FNDE"

Matriz lógica:

      [,1]  [,2]  [,3]  [,4]
[1,]  TRUE  TRUE  TRUE  TRUE
[2,]  TRUE  TRUE  TRUE  TRUE
[3,] FALSE FALSE FALSE FALSE
[4,]  TRUE  TRUE  TRUE  TRUE


  • Atenção para como são representados os índices de linhas e colunas das matrizes!!

Dataframes - Definição



  • são objetos parecidos com uma matriz, com a diferença de que as colunas ou linhas podem ser de tipos diferentes;

  • OBS: é o principal objeto utilizado para armazenar tabelas de dados no R.

Dataframes - Exemplo

   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
2           4.9         3.0          1.4         0.2  setosa
3           4.7         3.2          1.3         0.2  setosa
4           4.6         3.1          1.5         0.2  setosa
5           5.0         3.6          1.4         0.2  setosa
6           5.4         3.9          1.7         0.4  setosa
7           4.6         3.4          1.4         0.3  setosa
8           5.0         3.4          1.5         0.2  setosa
9           4.4         2.9          1.4         0.2  setosa
10          4.9         3.1          1.5         0.1  setosa

Funções - Definição



  • são um conjunto de procedimentos que recebem nenhum, um ou mais parâmetros, como input, realizam um cálculo ou procedimento e retornam um resultado para o usuário;

  • OBS: até funções são tratadas como objetos pelo R.

Funções - Exemplo

meu_cubo <- function(x){
  out <- x^3
  return(out)
}
meu_cubo
function(x){
  out <- x^3
  return(out)
}

Listas - Definição



  • são o tipo mais amplo de objeto, que pode reunir coleções de dataframes, vetores, matrizes, funções ou ainda de todos esses tipos juntos;

  • OBS: Como os objetos de uma lista não precisam ser do mesmo tipo, também não há a necessidade de que sejam do mesmo tamanho. Isso, muitas vezes, ajuda na manipulação de dados.

Listas - Exemplo

  • Consegue identificar o tipo de cada objeto desta lista?
[[1]]
 [1] "R"    "FNDE" "R"    "FNDE" "R"    "FNDE" "R"    "FNDE" "R"    "FNDE"
[11] "R"    "FNDE" "R"    "FNDE" "R"    "FNDE" "R"    "FNDE" "R"    "FNDE"

[[2]]
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa

[[3]]
          [,1]       [,2]
[1,] 0.9453489 0.05102219
[2,] 0.8881304 0.42832298

[[4]]
function (x) 
{
    out <- x^3
    return(out)
}
  • Atenção para como são representados os índices dos elementos dentro de uma lista e os índices dos objetos dentro destes elementos!!

Tipo de objeto e forma de armazenamento

  • Para saver o tipo de objeto que você tem:
    • str(objeto);
    • class(objeto);

  • Para saber como ele está sendo armazenado na memória (importante para objetos numéricos):
    • mode(objeto);
    • typeof(objeto).

Criação, indexação e manipulação de objetos

  • Para atribuir valores a um objeto use “<-”:
x <- 4
# ou
x = 4


  • Para concatenar vários valores e salvá-los em um objeto, use a função “c(objeto1, objeto2, …)”:
x <- c(4,5,6,7,8)
# ou
x = c(4,5,6,7,8)
  • Para extrair um ou vários elementos de um objeto, use “objeto[índice]”:
x[3] # extraindo 3º elemento do vetor x

x[c(1,4)] # extraindo 1º e 4º elementos do vetor x
  • Treine agora com todos os objetos, reproduzindo os elementos da apostila.
  • Lembre-se de utilizar a ajuda do R caso se depare com uma nova função !!
  • Salve seus códigos num script !!
  • Leia sobre a indexação usando $.
  • Atente para regras relativas aos nomes dos objetos!!

Criação, indexação e manipulação de objetos - Exemplos (1)

Criação de alguns objetos:

vetor1 <- c(12, 43.8, NA, 67)
vetor2 <- c(2, 90, 360, 23) 
vetor3 <- c("BB", "CEF", "CEF", "BB")

df <- data.frame("valor"=vetor1, "atraso"=vetor2, "banco"=vetor3)

m <- matrix(c(1,2,3,4,5,6,7,8,9,10), ncol=2)

m2 <- matrix(c(1,2,3,4,5,6,7,8,9,10), ncol=2, byrow=TRUE)

minha_lista <- list(m2, vetor1, df)

Indexação:

vetor1[3]
[1] NA
vetor2[c(1,3)]
[1]   2 360
df[,2]
[1]   2  90 360  23
df$atraso
[1]   2  90 360  23
df[,"atraso"]
[1]   2  90 360  23
df[-3,]
  valor atraso banco
1  12.0      2    BB
2  43.8     90   CEF
4  67.0     23    BB
m[1,2]
[1] 6
minha_lista[[2]]
[1] 12.0 43.8   NA 67.0
minha_lista[[2]][1] # ou  minha_lista[[c(2,1)]]
[1] 12

Funções importantes (1) - Funções matemáticas

  • Há algumas funções que serão usadas muitas vezes ao se analisar dados com R;
  • Elas normalmente receberão como parâmetros algum dos objetos que vimos anteriormente;
# criando dados fictícios:
vetor1 <- c(12, 43.8, NA, 67)
vetor2 <- c(2, 90, 360, 23) 
vetor3 <- c("BB", "CEF", "CEF", "BB")

df <- data.frame("valor"=vetor1, "atraso"=vetor2, "banco"=vetor3)

m <- matrix(c(1,2,3,4,5,6,7,8,9,10), ncol=2)
mean(vetor2) # média
[1] 118.75
mean(df[,2]) 
[1] 118.75
sum(df[,1]) # soma
[1] NA
sum(df[,1], na.rm=TRUE) # soma com missig value
[1] 122.8
colMeans(df[, c(1,2)], na.rm=TRUE) # só p/ colunas numéricas
    valor    atraso 
 40.93333 118.75000 
rowMeans(m)
[1] 3.5 4.5 5.5 6.5 7.5
colSums(m)
[1] 15 40
rowSums(df[,c(1,2)])
[1]  14.0 133.8    NA  90.0

Funções importantes (2) - Nomes, tamanhos e ordenação

colnames(df)
[1] "valor"  "atraso" "banco" 
names(vetor1)
NULL
length(vetor3)
[1] 4
ncol(df) # nro colunas
[1] 3
nrow(m) # nro linhas
[1] 5
max(m) # max
[1] 10
min(vetor2) # min
[1] 2
sort(df[,2]) # ordenar os valores
[1]   2  23  90 360
sort(m[,2], decreasing = TRUE) # forma decrescente
[1] 10  9  8  7  6
sort(vetor3) # também ordena alfabeticamente
[1] "BB"  "BB"  "CEF" "CEF"
order(df[,2]) # ordena e retorna os índices originais dos elementos dentro da ordenação
[1] 1 4 2 3
rank(vetor2) # atribui postos aos valores de um objeto sem ordenar a poisção da saída 
[1] 1 3 4 2

Funções importantes (3)

  • Utilidades
## listar e remover objetos
ls() # listar
rm(objeto) # remover
  • Sequências
1:10 # sequencia de 1 a 10
 [1]  1  2  3  4  5  6  7  8  9 10
seq(from=1,to=10,by=2) # sequenciade 1 até 10 com intervalos de 2 em 2
[1] 1 3 5 7 9
seq(125, 155, 5) # sequencia de 125 a 155 com intervalos de 5 em 5
[1] 125 130 135 140 145 150 155
seq(0.1, 0.5, 0.05) # de 0.1 ate 0.5 de 0.05 em 0.05
[1] 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50
  • Repetições:
rep(x=5,times=10) # repetir o numero 5, 10 vezes
 [1] 5 5 5 5 5 5 5 5 5 5
rep("FNDE", 4) # repete a palavra FNDE 4 vezes
[1] "FNDE" "FNDE" "FNDE" "FNDE"
rep(vetor1, 2) # repete o vetor inteiro duas vezes
[1] 12.0 43.8   NA 67.0 12.0 43.8   NA 67.0
rep(df[,2], each=3 ) # repete cada elemento 3 vezes
 [1]   2   2   2  90  90  90 360 360 360  23  23  23
rep(c("três", "dois", "um", "quatro"), c(3,2,1,4)) # primeiro parametro 
 [1] "três"   "três"   "três"   "dois"   "dois"   "um"     "quatro"
 [8] "quatro" "quatro" "quatro"
#...indica quais palavras devem ser repetidas e segundo parametro
#... indica quantas vezes cada uma será repetida

Funções importantes (4)

  • “Colagem” e junção
paste("FIES", "FNDE", "R", sep="")
[1] "FIESFNDER"
paste("FIES", "FNDE", "R", sep="-")
[1] "FIES-FNDE-R"
paste(1:3, c("FNDE","MEC"), 1:2,  sep="/") # !!reciclagem!!
[1] "1/FNDE/1" "2/MEC/2"  "3/FNDE/1"
paste(c("A", "S", "D", "F"), 
      c("W", "X", "Y", "Z")) # mesmo que sep=" "
[1] "A W" "S X" "D Y" "F Z"
paste(c("A", "S", "D", "F"), 
      c("W", "X", "Y", "Z"), collapse = '') # produz uma úncia string
[1] "A WS XD YF Z"
  • Aleatorização e sorteio
sample(x=vetor1, size=2, replace=FALSE) # sorteia dois elementos do vetor1 sem repetição
[1] 67.0 43.8
sample(x=1:5, size=4, replace=TRUE) # sorteia 4 elementos da sequencia de 1 a 5...com possibilidade de repetição
[1] 2 2 5 1