Curso R

Ecologia

Alexandre Adalardo de Oliveira

IBUSP maio 2019

Aula 3

Classes de Objetos

  • Vetores
  • Dataframe
  • Matrix
  • Lista

Importando Dados

  • arquivos textos
  • padrão de importação

Importando dados

Importando arquivo texto

Diretório de trabalho

## [1] "/home/aao/Ale2016/AleCursos/RUSP/R2019/Aulas/Aula3_dados"
## [1] "aula3_2017.pdf"          "aula3.html"             
## [3] "aula3.rmd"               "aula3.rmd~"             
## [5] "dados"                   "scritptRAulaDado2016.R" 
## [7] "scritptRAulaDado2017.R"  "scritptRAulaDado2017.R~"
##  [1] "gua.clas.txt"     "trapa_nome.txt"   "trapa_nome.xls"  
##  [4] "trapa_nome1.txt"  "trapa.csv"        "trapa.txt"       
##  [7] "trapa.xls"        "trapa1.csv"       "trapaVirgula.csv"
## [10] "trapaVirgula.txt"

Função de leitura de dados

##   codinome nascimento estado vivo altura
## 1     Didi       1936     CE    s   1.68
## 2     Dede       1936     RJ    s   1.79
## 3   Mussum       1941     RJ    n   1.81
## 4 Zacarias       1934     MG    n   1.61
## character(0)

Atribuição a um objeto

## [1] "trapa"
##   codinome nascimento estado vivo altura
## 1     Didi       1936     CE    s   1.68
## 2     Dede       1936     RJ    s   1.79
## 3   Mussum       1941     RJ    n   1.81
## 4 Zacarias       1934     MG    n   1.61

Mundo Complexo

  • Dependência do idioma (locale)
    • decimal (“.” ou “,”)
    • separador de campo (“,”, “;”, “tab” )
  • Codificação de fontes
    • caracteres especiais (acentos)
  • read.table é flexível
  • leitura limpa não pressupoem correção

Leitura: problemas

##   codinome.nascimento.estado.vivo.altura
## 1                    Didi,1936,CE,s,1.68
## 2                    Dede,1936,RJ,s,1.79
## 3                  Mussum,1941,RJ,n,1.81
## 4                Zacarias,1934,MG,n,1.61
## 'data.frame':    4 obs. of  1 variable:
##  $ codinome.nascimento.estado.vivo.altura: Factor w/ 4 levels "Dede,1936,RJ,s,1.79",..: 2 1 3 4

Leitura: problemas

##                      codinome.nascimento.estado.vivo.altura
## Didi;1936;CE;s;1                                         68
## Dede;1936;RJ;s;1                                         79
## Mussum;1941;RJ;n;1                                       81
## Zacarias;1934;MG;n;1                                     61
## 'data.frame':    4 obs. of  1 variable:
##  $ codinome.nascimento.estado.vivo.altura: int  68 79 81 61
##   codinome nascimento estado vivo altura
## 1     Didi       1936     CE    s   1,68
## 2     Dede       1936     RJ    s   1,79
## 3   Mussum       1941     RJ    n   1,81
## 4 Zacarias       1934     MG    n   1,61
## 'data.frame':    4 obs. of  5 variables:
##  $ codinome  : Factor w/ 4 levels "Dede","Didi",..: 2 1 3 4
##  $ nascimento: int  1936 1936 1941 1934
##  $ estado    : Factor w/ 3 levels "CE","MG","RJ": 1 3 3 2
##  $ vivo      : Factor w/ 2 levels "n","s": 2 2 1 1
##  $ altura    : Factor w/ 4 levels "1,61","1,68",..: 2 3 4 1
##   codinome nascimento estado vivo altura
## 1     Didi       1936     CE    s   1.68
## 2     Dede       1936     RJ    s   1.79
## 3   Mussum       1941     RJ    n   1.81
## 4 Zacarias       1934     MG    n   1.61
## 'data.frame':    4 obs. of  5 variables:
##  $ codinome  : Factor w/ 4 levels "Dede","Didi",..: 2 1 3 4
##  $ nascimento: int  1936 1936 1941 1934
##  $ estado    : Factor w/ 3 levels "CE","MG","RJ": 1 3 3 2
##  $ vivo      : Factor w/ 2 levels "n","s": 2 2 1 1
##  $ altura    : num  1.68 1.79 1.81 1.61
##   codinome nascimento estado vivo altura
## 1     Didi       1936     CE    s   1.68
## 2     Dede       1936     RJ    s   1.79
## 3   Mussum       1941     RJ    n   1.81
## 4 Zacarias       1934     MG    n   1.61
## 'data.frame':    4 obs. of  5 variables:
##  $ codinome  : chr  "Didi" "Dede" "Mussum" "Zacarias"
##  $ nascimento: int  1936 1936 1941 1934
##  $ estado    : chr  "CE" "RJ" "RJ" "MG"
##  $ vivo      : chr  "s" "s" "n" "n"
##  $ altura    : num  1.68 1.79 1.81 1.61

Help!

Evitando transtornos

  • separação de campo
  • evite usar “,” como decimal
    • mude a configuração do computador
  • estude os argumentos do read.table
  • cuidado com caracteres especiais (‘, ",’, `)
  • use encoding UTF8

Estabeleça um padrão

Padrão Alê

  • nome de variáveis simples
  • metadado para explicar a variável
  • separador de campo tabulação
  • decimal “.” PLEASE!
  • leitura de caracteres (as.is)

Dados de outras fontes

  • abra no libreOffice
  • salve no seu padrão de texto
  • use encoding UTF8
  • substitua ’ ` ’ " se necessário

Pós leitura

## 'data.frame':    4 obs. of  6 variables:
##  $ codinome  : chr  "Didi" "Dedé" "Mussum" "Zacarias"
##  $ nascimento: int  1936 1936 1941 1934
##  $ estado    : chr  "CE" "RJ" "RJ" "MG"
##  $ vivo      : chr  "s" "s" "n" "n"
##  $ altura    : num  1.68 1.79 1.81 1.61
##  $ nome      : chr  "Antônio Renato Aragão" "Manfried Sant Anna" "Antônio Carlos Bernardes Gomes" "Mauro Faccio Gonçalves"
## [1] 4 5

Pós leitura

FAÇA UMA ANÁLISE EXPLORATÓRIA DOS DADOS


AULA DE SEXTA-FEIRA!

Manipulando objetos

Vetores

##  [1]    0  100  200  300  400  500  600  700  800  900 1000
## [1] "numeric"
## [1] 11

Vetores

##  num [1:11] 0 100 200 300 400 500 600 700 800 900 ...
##  [1]  0  1  2  3  4  5  6  7  8  9 10

Extração

## [1] 400
## [1] 100 200 300 400 500 600
## [1]    0  200  400  600 1000
## [1]    0  200  400  600  800 1000
## [1]  1  3  5  7  9 11

REGRA DA SUBSTITUIÇÃO

## [1] 400
##  [1] "0"            "100"          "200"          "300"         
##  [5] "quatrocentos" "500"          "600"          "700"         
##  [9] "800"          "900"          "1000"
## [1] "400"
##  [1] "0"    "100"  "200"  "300"  "400"  "500"  "600"  "700"  "800"  "900" 
## [11] "1000"
## [1] "character"

Funções de coerção

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

Classes de objetos

Linguagem orientada a objetos

##  [1]  303  379  961  295  332   47  122   11   53 2749
## [1] "numeric"
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   11.00   70.25  299.00  525.20  367.25 2749.00
## [1] "lm"
## 
## Call:
## lm(formula = riqueza ~ area)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.4614 -2.1245 -0.5101  1.4862  7.6863 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 5.226994   1.352158   3.866 0.004770 ** 
## area        0.007374   0.001431   5.155 0.000869 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.555 on 8 degrees of freedom
## Multiple R-squared:  0.7686, Adjusted R-squared:  0.7397 
## F-statistic: 26.57 on 1 and 8 DF,  p-value: 0.0008693

Dataframe

Qual a classe do objeto trapa?

## [1] "data.frame"
## 'data.frame':    4 obs. of  5 variables:
##  $ codinome  : chr  "Didi" "Dede" "Mussum" "Zacarias"
##  $ nascimento: int  1936 1936 1941 1934
##  $ estado    : chr  "CE" "RJ" "RJ" "MG"
##  $ vivo      : chr  "s" "s" "n" "n"
##  $ altura    : num  1.68 1.79 1.81 1.61
## [1] "codinome"   "nascimento" "estado"     "vivo"       "altura"
## [1] "codinome"   "nascimento" "estado"     "vivo"       "altura"
## [1] "altura"
## [1] "alt"

Indexadores de data.frame

  • $ : indexa o nome da coluna
  • colchete : linha, coluna
## [1] "Didi"     "Dede"     "Mussum"   "Zacarias"
## [1] "Dede"
## [1] "Didi" "Dede"

Duas dimensões

## [1] "Dede"
## [1] "Dede" "Didi"
## [1] "Dede"

Coerção e sobrescrição

## [1] "s" "s" "n" "n"
##  num [1:4] 1 1 0 0
## [1]  TRUE  TRUE FALSE FALSE

Novas variáveis

## [1] 1936 1936 1941 1934
## [1] 82 82 77 84
## [1] 82 82 77 84

Dataframe

Classe dataframe

  • vetores de mesmo tamanho
  • concatenados
  • natureza de variáveis diferentes
  • UMA PLANILHA DADOS

Matrix

##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
## [3,]    3    7   11
## [4,]    4    8   12

Matrix

##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9
## [4,]   10   11   12

Matrix

##      [,1] [,2] [,3] [,4] [,5]
## [1,]    0    4    0    2    3
## [2,]    2    6    0    4    4
## [3,]    4    0    0    5    3
## [4,]    0    0    1    5    0
## [5,]    0    0    0    0    0
## [6,]    1    5    0    0    0
## [7,]    5    4    3    0    0
## [8,]    4    2    0    0    5

Como assim?

##  [1] 0 6 4 1 4 4 1 1 6 2 5 3 2 3 0 5 1 4 3 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [36] 0 0 0 0 0
##  [1] 3 2 1 3 3 0 0 6 4 0 5 5 1 5 5 5 5 5 6 2 3 2 4 4 4 4 3 2 2 0 5 5 5 0 0
## [36] 1 5 5 0 3

Nomeando linhas

## [1] "ilha_1" "ilha_2" "ilha_3" "ilha_4" "ilha_5" "ilha_6" "ilha_7" "ilha_8"

Nomeando colunas

##        sp_1 sp_2 sp_3 sp_4 sp_5
## ilha_1    0    4    0    2    3
## ilha_2    2    6    0    4    4
## ilha_3    4    0    0    5    3
## ilha_4    0    0    1    5    0
## ilha_5    0    0    0    0    0
## ilha_6    1    5    0    0    0
## ilha_7    5    4    3    0    0
## ilha_8    4    2    0    0    5

Indexando

## ilha_1 ilha_2 ilha_3 ilha_4 ilha_5 ilha_6 ilha_7 ilha_8 
##      0      2      4      0      0      1      5      4
## ilha_1 ilha_2 ilha_3 ilha_4 ilha_5 ilha_6 ilha_7 ilha_8 
##      3      4      3      0      0      0      0      5
##        sp_2 sp_4 sp_5
## ilha_1    4    2    3
## ilha_2    6    4    4
## ilha_3    0    5    3
## ilha_4    0    5    0
## ilha_5    0    0    0
## ilha_6    5    0    0
## ilha_7    4    0    0
## ilha_8    2    0    5

Indexando

##        sp_2 sp_4 sp_5
## ilha_2    6    4    4
## ilha_4    0    5    0

Matrizes

  • linhas e colunas concatenados
  • vetores de mesma natureza
  • algebra linear

Lista

## [1] 1 2 3 4 5
## [1] a a a b b b c c c
## Levels: a b c
##   sec inicio
## 1 XIX   1801
## 2  XX   1901
## 3 XXI   2001
## $v1
## [1] 1 2 3 4 5
## 
## $f1
## [1] a a a b b b c c c
## Levels: a b c
## 
## $df1
##   sec inicio
## 1 XIX   1801
## 2  XX   1901
## 3 XXI   2001

Indexando Listas

## [1] 1801 1901 2001
## [1] 1800 1900 2000

Modificando Listas

## List of 4
##  $ v1    : int [1:5] 1 2 3 4 5
##  $ f1    : Factor w/ 3 levels "a","b","c": 1 1 1 2 2 2 3 3 3
##  $ df1   :'data.frame':  3 obs. of  2 variables:
##   ..$ sec   : Factor w/ 3 levels "XIX","XX","XXI": 1 2 3
##   ..$ inicio: num [1:3] 1800 1900 2000
##  $ inicio: chr "início do século"

Indexação de listas

## [1] a a a b b b c c c
## Levels: a b c
## [1] a a a b b b c c c
## Levels: a b c
## [1] a a a b b b c c c
## Levels: a b c

Indexação de listas

## [1] b
## Levels: a b c
## [1] 1800
##   sec inicio
## 1 XIX   1800
## 2  XX   1900
## 3 XXI   2000

Principais Classes

  • vetores [1]
  • data.frame [l,c]
  • listas[[…]]
  • arrays [l, c, p,…]
    • matrizes [l, c]

Indexadores

## [1] 1.85 1.78 1.92 1.63 1.81 1.55
## [1] M M M F F F
## Levels: F M

Ordenadores de posição

## [1] 1.85 1.78 1.92 1.63 1.81 1.55
## [1] 5 3 6 2 4 1
## [1] 1.55 1.63 1.78 1.81 1.85 1.92
## [1] 6 4 2 5 1 3

Indexadores de posição

Ordenar o vetor de altura sem modificá-lo

## [1] 1.85 1.78 1.92 1.63 1.81 1.55
## [1] 1.55 1.63 1.78 1.81 1.85 1.92
## [1] 1.55 1.63 1.78 1.81 1.85 1.92

Indexadores de posição

Ordenar o vetor de sexo em função da altura

## [1] 1.85 1.78 1.92 1.63 1.81 1.55
## [1] M M M F F F
## Levels: F M
## [1] F F M F M M
## Levels: F M

Operadores Lógicos

Operadores lógicos

">", "<", ">=", "<=", "==", "!=", "&"

alt; sex

## [1] 1.85 1.78 1.92 1.63 1.81 1.55
## [1] M M M F F F
## Levels: F M

Indexação com Lógica

## [1]  TRUE FALSE  TRUE FALSE FALSE FALSE
## [1] 1.85 1.92

Quais são homens altos?

## [1] 1.85 1.78 1.92 1.63 1.81 1.55
## [1] M M M F F F
## Levels: F M
## [1] 1 3
##      sex  alt
## [1,]   2 1.85
## [2,]   2 1.78
## [3,]   2 1.92
## [4,]   1 1.63
## [5,]   1 1.81
## [6,]   1 1.55

Procurando algum padrão

Onde está o Didi

##   codinome nascimento estado vivo  alt idade
## 1     Didi       1936     CE TRUE 1.68    82
## [1]  TRUE FALSE FALSE FALSE

Buscando padrão em outro vetor

##   codinome nascimento estado vivo  alt idade
## 1     Didi       1936     CE TRUE 1.68    82
## 2     Dede       1936     RJ TRUE 1.79    82
## [1]  TRUE  TRUE FALSE FALSE

Juntando dados

##   codinome nascimento estado  vivo  alt idade
## 1     Didi       1936     CE  TRUE 1.68    82
## 2     Dede       1936     RJ  TRUE 1.79    82
## 3   Mussum       1941     RJ FALSE 1.81    77
## 4 Zacarias       1934     MG FALSE 1.61    84
##   codinome nascimento estado vivo altura                           nome
## 1     Didi       1936     CE    s   1.68          Antônio Renato Aragão
## 2     Dedé       1936     RJ    s   1.79             Manfried Sant Anna
## 3   Mussum       1941     RJ    n   1.81 Antônio Carlos Bernardes Gomes
## 4 Zacarias       1934     MG    n   1.61         Mauro Faccio Gonçalves

Juntando dados

##   codinome nascimento.x estado.x vivo.x  alt idade nascimento.y estado.y
## 1     Didi         1936       CE   TRUE 1.68    82         1936       CE
## 2   Mussum         1941       RJ  FALSE 1.81    77         1941       RJ
## 3 Zacarias         1934       MG  FALSE 1.61    84         1934       MG
##   vivo.y altura                           nome
## 1      s   1.68          Antônio Renato Aragão
## 2      n   1.81 Antônio Carlos Bernardes Gomes
## 3      n   1.61         Mauro Faccio Gonçalves

Familia apply

Média de tamanho por sexo

## [1] 1.85 1.78 1.92 1.63 1.81 1.55
## [1] M M M F F F
## Levels: F M
##        F        M 
## 1.663333 1.850000

Dados Ilha

##        sp_1 sp_2 sp_3 sp_4 sp_5
## ilha_1    0    4    0    2    3
## ilha_2    2    6    0    4    4
## ilha_3    4    0    0    5    3
## ilha_4    0    0    1    5    0
## ilha_5    0    0    0    0    0
## ilha_6    1    5    0    0    0
## ilha_7    5    4    3    0    0
## ilha_8    4    2    0    0    5

Quantos indivíduos em cada ilha?

## sp_1 sp_2 sp_3 sp_4 sp_5 
##   16   21    4   16   15

Quantas espécies em cada ilha?

##         sp_1  sp_2  sp_3  sp_4  sp_5
## ilha_1 FALSE  TRUE FALSE  TRUE  TRUE
## ilha_2  TRUE  TRUE FALSE  TRUE  TRUE
## ilha_3  TRUE FALSE FALSE  TRUE  TRUE
## ilha_4 FALSE FALSE  TRUE  TRUE FALSE
## ilha_5 FALSE FALSE FALSE FALSE FALSE
## ilha_6  TRUE  TRUE FALSE FALSE FALSE
## ilha_7  TRUE  TRUE  TRUE FALSE FALSE
## ilha_8  TRUE  TRUE FALSE FALSE  TRUE

Quantas espécies em cada ilha?

## ilha_1 ilha_2 ilha_3 ilha_4 ilha_5 ilha_6 ilha_7 ilha_8 
##      3      4      3      2      0      2      3      3

Quais ilhas tem abundâncias > 4

## ilha_1 ilha_2 ilha_3 ilha_4 ilha_5 ilha_6 ilha_7 ilha_8 
##      0      1      1      1      0      1      1      1

Quantos ocorrências para cada sp

## sp_1 sp_2 sp_3 sp_4 sp_5 
##    5    5    2    4    4

Pink

Um problema

Guapira opposita

  • Florestas em diferentes estágios sucessionais
  • Censo 2007 e 2008
  • 3 estágios de desenvolvimento


A regeneração da Guapira é afetada pelo estágio sucessional?

Matrizes de Transição


Dinâmica Populacional

Dinâmica de Guapira

## 'data.frame':    2191 obs. of  10 variables:
##  $ obsID          : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ floresta       : chr  "tardia" "tardia" "tardia" "tardia" ...
##  $ especie        : chr  "G" "G" "G" "G" ...
##  $ placa          : int  4 7 8 10 11 12 16 18 21 22 ...
##  $ medida         : chr  "dap" "dap" "dap" "dap" ...
##  $ tamanho2007    : num  60 71.6 19.2 32.7 32.5 ...
##  $ tamanho2008    : num  63.2 72.9 19.5 32.8 34.1 ...
##  $ Reprodutivo2007: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ classe2007     : int  3 3 3 3 3 3 3 3 3 3 ...
##  $ classe2008     : int  3 3 3 3 3 3 3 3 3 3 ...

População: Guapira opossita

## [1] "tardia"  "inicial"
## 
## inicial  tardia 
##    1279     912

Estrutura Populacional: Guapira

##    
##     inicial tardia
##   1     136     95
##   2     399    449
##   3     744    368

Dinâmica Populacional: Guapira

## , ,  = inicial
## 
##    
##       1   2   3
##   1 105   0   0
##   2  20 380   0
##   3   0  11 740
## 
## , ,  = tardia
## 
##    
##       1   2   3
##   1  72   0   0
##   2  20 431   0
##   3   0  14 368

Matrizes de Transição

##    
##              1          2          3
##   1 0.77205882 0.00000000 0.00000000
##   2 0.14705882 0.95238095 0.00000000
##   3 0.00000000 0.02756892 0.99462366
##    
##             1         2         3
##   1 0.7578947 0.0000000 0.0000000
##   2 0.2105263 0.9599109 0.0000000
##   3 0.0000000 0.0311804 1.0000000

Atividade

Atividade

Módulo 3: Leitura e Manipulação de dados

  • Tutorial
  • Apostila

Entrega dos exercícios:

  • Segunda-feira, 20 de maio até 8h

Pink