R e RStudio - Uma visão geral para os primeiros passos - Parte 2 de 2

by Cássio Rampinelli

April 21th, 2019

OBJETIVOS

Os principais objetivos deste post são:

PRIMEIRAS LINHAS DE COMANDO NO R/RStudio

 

Conforme vimos aqui, após instalar o R e o RStudio e abrir o RStudio teremos uma tela com quatro painéis. Vamos iniciar nossas primeiras linhas de comando digitando os códigos no Painel 1 a esquerda.

O símbolo # é utilizado para fazer comentário. No exemplo abaixo, armazenamos na variável x a soma 2+2 e em seguida digitamos a variável x para ver o resultado da soma que foi armazenado nela.

Para processar este código pode-se:

O resultado da execução do código é mostrado no painel Console

 

A seguir, veremos alguns comandos básicos para os primeiros passos no R. Basta copiar os comandos e colá-los (ou digitá-los, se preferir. Eu, particularmente, quando faço tutoriais prefiro ir digitando os comandos para ir entendendo e memorizando melhor as rotinas de programação). Para executar os códigos basta clicar em Run ou selecionar as linhas e apertar as teclas Ctrl mais a tecla Enter.

Algumas Funcionalidades Básicas

Limpando a memória do R

As teclas de atalho Ctrl+ENTER e Ctrl + L são muito úteis para executar as linhas de código e limpar os códigos replicados no console.

Outro comando interessante, antes de inicar os códigos, é o comando rm(list=ls(all=TRUE)). A funçao rm() é utilizada para remover objetos contidos na memória do R (na aba/lapela Environment). O argumento list=ls(all=TRUE) significa que todos os objetos presentes na memória serão passados como argumentos para serem removidos.

Antes de iniciar novos cáculos é recomendável limpar a memória. Abaixo as linhas de códigos para este comando.

#Atalhos interessantes:
#Ctrl+ENTER -> Executa a linha de comando
#Ctrl+L -> Limpa o console
########################################

# Este comando limpa toda a memória do R, apagando todos
# os objetos e funções :
rm(list=ls(all=TRUE))

R como uma simples calculadora

# O R pode ser usado como uma calculadora...
2+2
## [1] 4
# ...até como uma calculadora científica...
exp(-2)
## [1] 0.1353353
log(3*(4^(-2)))**6
## [1] 22.00372

Manipulando variáveis

# Pode-se facilmente atribuir valores a variáveis e trabalhar com elas
x=2
y=2
z=x+y
z
## [1] 4
# Armazenando escalares e executando operações...
Constante <- 2
Constante*Constante
## [1] 4

Vetores/Arrays

# Um vetor...
Temperatura <- c(15.65,34.43,12.54,17.54)

#mostra o elementos do vetor Temperatura
Temperatura   
## [1] 15.65 34.43 12.54 17.54
# tamanho do vetor
length(Temperatura)      
## [1] 4
# produto escalar de vetores
Temperatura*Temperatura  
## [1]  244.9225 1185.4249  157.2516  307.6516
# produto interno
t(Temperatura) %*% Temperatura 
##          [,1]
## [1,] 1895.251
# produto externo
Temperatura %*% t(Temperatura) 
##          [,1]      [,2]     [,3]     [,4]
## [1,] 244.9225  538.8295 196.2510 274.5010
## [2,] 538.8295 1185.4249 431.7522 603.9022
## [3,] 196.2510  431.7522 157.2516 219.9516
## [4,] 274.5010  603.9022 219.9516 307.6516
#Transposta
t(Temperatura)
##       [,1]  [,2]  [,3]  [,4]
## [1,] 15.65 34.43 12.54 17.54

Escrevendo uma função

A declaração de uma função é certamente um dos procedimentos mais imporatntes. A sintaxe para a declaração de uma função é relativamente simples.

Digita-se primeiramente o nome da função, utiliza-se o sinal <- para atribuir ao nome o conteúdo da função que é dado por function(argumentos da função){conteúdo da função}

A seguir, um exemplo de uma função:

# Declarando uma função quadrática...
funcaoQuadratica <- function(x){   
  
  ##O resultado da função será armazenado na variável resultado  
  resultado=x^2+5
    
  ##Retornando o resultado da função
    return(resultado)
    
    }

Para chamar a função basta digitar o seu nome e passar a ela o argumento desejado. Ao executar a função ela retornará o resultado.

#Chamando a funcao
funcaoQuadratica(x=2)
## [1] 9

Visualizando o gráfico da função

Para visualizar a função em um gráfico, pode-se utilizar o comando plot e passar automaticamente os argumentos, como apresentado abaixo.

#Primeiramente podemos criar uma sequencia de coordenadas x
x=seq(from=-10,to=10,by=0.5)

#Vendo os argumentos que foram criados e armazenados no vetor x
x
##  [1] -10.0  -9.5  -9.0  -8.5  -8.0  -7.5  -7.0  -6.5  -6.0  -5.5  -5.0
## [12]  -4.5  -4.0  -3.5  -3.0  -2.5  -2.0  -1.5  -1.0  -0.5   0.0   0.5
## [23]   1.0   1.5   2.0   2.5   3.0   3.5   4.0   4.5   5.0   5.5   6.0
## [34]   6.5   7.0   7.5   8.0   8.5   9.0   9.5  10.0
#Podemos agora chamar a função plot para visualizar os pontos f(x)

plot(funcaoQuadratica(x))

#Vamos dar uma melhorada no gráfico colocando um título, atribuindo nome para os eixos e passando uma linha ligando os pontos plotados.

plot(funcaoQuadratica(x),main="Título do Gráfico: Função Quadrática",xlab="Eixo x", ylab="Eixo y = f(x)")

lines(funcaoQuadratica(x),col="red")

Derivando

Podemos derivar funções no R. Neste caso, vamos derivar a função quadrática do exemplo anterior e salvar o resultado como uma função para plotarmos a derivada e a função quadrática juntos.

No caso da derivada, vamos usar uma função pré-existente chamada deriv.

O primeiro argumento que damos a função deriv é a formula de f(x). Vamos usar a função que definimos anteriormente (x^2+5). Contudo, é preciso usar o símbolo “~” antes de inserirmos a expressão da função, e como segundo segundo argumento da função deve ser passado o nome da variável x entre aspas.

#Derivando e salvando a expressão da derivada na variável derivada. Para derivar usamos a função
# deriv

#O primeiro argumento que damos a função deriv é a formula de f(x), neste caso vamos usar a função Quadratica x^2+5 que definimos anteriormente. Depois do "~", inserimos a variável x entre aspas. 


derivada<-deriv(~x^2+5,"x")

Vamos ver como ficou a derivada

derivada
## expression({
##     .value <- x^2 + 5
##     .grad <- array(0, c(length(.value), 1L), list(NULL, c("x")))
##     .grad[, "x"] <- 2 * x
##     attr(.value, "gradient") <- .grad
##     .value
## })

Bem, meio confuso isso, né?

Mas o que saiu aí é na verdade o que está contido dentro da variável derivada, que possui uma série de elementos, incluindo, a função da derivada.

Observe a linha que contém:

.grad[, “x”] <- 2 * x

Esta é a derivada da nossa função quadrática.

Podemos manualmente criar uma nova função com esta expressão ou usar a função attr(.value,“gradient”) que foi automaticamente criada com a expressão da derivada. Essa função requer como argumento .value, no caso a variável que utilizamos para armazenar a derivada, e precisamos usar a expressão “gradient”, como segundo argumento. Assim, podemos calcular os valores das derivadas no vetor x de pontos que criamos com esta função. Vejamos.

attr(eval(derivada),"gradient")
##         x
##  [1,] -20
##  [2,] -19
##  [3,] -18
##  [4,] -17
##  [5,] -16
##  [6,] -15
##  [7,] -14
##  [8,] -13
##  [9,] -12
## [10,] -11
## [11,] -10
## [12,]  -9
## [13,]  -8
## [14,]  -7
## [15,]  -6
## [16,]  -5
## [17,]  -4
## [18,]  -3
## [19,]  -2
## [20,]  -1
## [21,]   0
## [22,]   1
## [23,]   2
## [24,]   3
## [25,]   4
## [26,]   5
## [27,]   6
## [28,]   7
## [29,]   8
## [30,]   9
## [31,]  10
## [32,]  11
## [33,]  12
## [34,]  13
## [35,]  14
## [36,]  15
## [37,]  16
## [38,]  17
## [39,]  18
## [40,]  19
## [41,]  20

Bem, para não ficar tão confuso, vamos simplesmente criar uma função com expressão derivada e plotar os gráficos da derivada e da função quadrática original.

#Função que contém a expressão da derivada
funcaoDerivada<-function(x){return(2*x)}

#Plotando a função quadrática, atribuindo o título (main), o nome do eixo (xlab), o nome do eixo y (ylab),o gráfico como linha (type="l"), o tipo de linha (lty=1) e a cor (col).


plot(funcaoQuadratica(x),main="Função Quadrática e Sua Derivada",xlab="Eixo x", ylab="f(x) e f'(x)",type="l",lty=1,col="red")

#Inserindo a função derivada
lines(funcaoDerivada(x),lty=2,col="blue")

#Configurando a legenda
legend("top",c("f(x)","f'(x)"),col=c("red","blue"),lty=c(1,2))

Observe que precisamos configurar o limite em y para poder visualizar melhor, vamos repetir o código ajustando os limites em y.

#Função que contém a expressão da derivada
funcaoDerivada<-function(x){return(2*x)}

#Plotando a função quadrática, atribuindo o título (main), o nome do eixo (xlab), o nome do eixo y (ylab),o gráfico como linha (type="l"), o tipo de linha (lty=1) e a cor (col).


plot(funcaoQuadratica(x),main="Função Quadrática e Sua Derivada",xlab="Eixo x", ylab="f(x) e f'(x)",type="l",lty=1,col="red",ylim=c(-20,120))


#Inserindo a função derivada
lines(funcaoDerivada(x),lty=2,col="blue")

Integrando

Também podemos integrar utilizando a função integrate() e passando como argumento a ela a função, neste caso, vamos usar a função quadrática definida anteriormente, e os limites de integração inferior (lower) e superior (upper).

Vamos armazenar o resultado da integração na variável integral e depois verificar seu valor.

# Integrando numericamente...
integral=integrate(funcaoQuadratica, lower = -5, upper = 5)
integral
## 133.3333 with absolute error < 1.5e-12

Matrizes

Antes de criarmos uma matriz vamos armazenar em um vetor chamado Dados uma sequência numérica de 1 até 12, usando a função c(), que é uma função que concatena os argumentos passados a ela. É possível concater números ou caracteres, por exemplo:

concatenar=c("c","o","n","c","a","t","e","n","a","r")
concatenar
##  [1] "c" "o" "n" "c" "a" "t" "e" "n" "a" "r"

Vamos criar uma sequência de 1 a 12 e armazenar na variável Dados.

# Uma matriz...
Dados <- c(1:12)
Dados
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12

Agora vamos reorganizar o vetor Dados em uma matriz chamada Mat1 com 4 linhas (rows) e 3 colunas (3). A função matrix() recebe como argumento os elementos, neste caso usaremos o vetor Dados e o número de linhas nrow e colunas ncol.

Observe, que o comando padrão vai criando as colunas de quatro em quatro elementos do vetor.

Mat1 <- matrix(Dados,nrow=4,ncol=3)
Mat1
##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
## [3,]    3    7   11
## [4,]    4    8   12

É possível ir criando as linhas a cada quatro elementos do vetor, basta inserir como argumento na função matrix a expressão by row.

Mat2 <- matrix(Dados,nrow=4,ncol=3,byrow=TRUE)
Mat2
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9
## [4,]   10   11   12

Abaixo algumas operações básicas com as matrizes Mat1 e Mat2.

#Somando as matrizes
Mat1+Mat2
##      [,1] [,2] [,3]
## [1,]    2    7   12
## [2,]    6   11   16
## [3,]   10   15   20
## [4,]   14   19   24
#Multiplicação matricial
t(Mat1) %*% Mat2 
##      [,1] [,2] [,3]
## [1,]   70   80   90
## [2,]  158  184  210
## [3,]  246  288  330
#Multiplicação elemento por elemento
Mat1*Mat2
##      [,1] [,2] [,3]
## [1,]    1   10   27
## [2,]    8   30   60
## [3,]   21   56   99
## [4,]   40   88  144
# O R "recicla" os operandos quando são de tipos diferentes...
1/Mat1   
##           [,1]      [,2]       [,3]
## [1,] 1.0000000 0.2000000 0.11111111
## [2,] 0.5000000 0.1666667 0.10000000
## [3,] 0.3333333 0.1428571 0.09090909
## [4,] 0.2500000 0.1250000 0.08333333
# Elevando os elementos da matriz 2 ao quadrado
Mat2^2
##      [,1] [,2] [,3]
## [1,]    1    4    9
## [2,]   16   25   36
## [3,]   49   64   81
## [4,]  100  121  144
# Gerando duas matrizes com valores aleatórios, inteiros, de 0 a 10
Mat1 <- matrix(round(runif(12,0,10)),nrow=4,ncol=3)
Mat2 <- matrix(round(runif(12,0,10)),nrow=4,ncol=3)
Mat1; Mat2
##      [,1] [,2] [,3]
## [1,]    7    0    3
## [2,]    8    1    9
## [3,]    2    0    1
## [4,]    5    0    0
##      [,1] [,2] [,3]
## [1,]   10    9    8
## [2,]    1   10    4
## [3,]   10    3    3
## [4,]   10    0    6
# Calculando a inversa de uma matriz...  
solve(t(Mat1) %*% Mat2)  
##             [,1]       [,2]       [,3]
## [1,] -0.03882992 -1.4219519  0.1667098
## [2,] -0.03442920 -0.8407973  0.1211494
## [3,]  0.09578048  2.7074812 -0.3445509

Listas de objetos

A listas consistem em estruturas importantes no R. Algumas funções que utilizamos de pacotes já existentes retornam listas. Uma lista pode conter diferente estruturas de dados. É possível armazenar matrizes, caracteres, números, vetores, tudo junto em uma lista.

Vamos armazenar na variável Lista uma lista contendo uma série de objetos diferentes, o número 2, um vetor contendo os números 4,5,6, a palavra Gato, um vetor contendo as palavras Cachorro e bola e os inversos dos números que compõem a Matriz Mat1 que trabalhamos nos passos anteriores.

Lista <- list(2, c(4,5,6), "Gato", c("Cachorro", "bola"), 1/Mat1)
Lista
## [[1]]
## [1] 2
## 
## [[2]]
## [1] 4 5 6
## 
## [[3]]
## [1] "Gato"
## 
## [[4]]
## [1] "Cachorro" "bola"    
## 
## [[5]]
##           [,1] [,2]      [,3]
## [1,] 0.1428571  Inf 0.3333333
## [2,] 0.1250000    1 0.1111111
## [3,] 0.5000000  Inf 1.0000000
## [4,] 0.2000000  Inf       Inf

Observe que cada elemento na lista recebe um número, por exemplo o elemento [[1]] é o número 2, o elemento [[2]] é o vetor 4,5,6, o elemento [[3]] é a palavra Gato, o elemento [[4]] o vetor contendo as palavras Cachorro e bola, e o elemento [[5]] os valores invertidos da Matriz Mat1.

Para acessar os elementos da Lista passamos como argumento a variável list ao número do elemento desejado, por exemplo:

#Acessando o elemento 1
Lista[[1]]
## [1] 2
#Acessando o elemento2
Lista[[2]]
## [1] 4 5 6
#Acessando o elemento 3
Lista[[3]]
## [1] "Gato"
#Acessando o elemento 4
Lista[[4]]
## [1] "Cachorro" "bola"
#Acessando o elemento 5
Lista[[5]]
##           [,1] [,2]      [,3]
## [1,] 0.1428571  Inf 0.3333333
## [2,] 0.1250000    1 0.1111111
## [3,] 0.5000000  Inf 1.0000000
## [4,] 0.2000000  Inf       Inf

Se quisermos acessar apenas o segundo termo do vetor que compõe o elemento [[2]], usamos a seguinte sintaxe

Lista[[2]][2]
## [1] 5

Para acessar o primeiro e segundo termos do segundo elemento da lista, podemos utilizar o seguinte comando:

Lista[[2]][1:2]
## [1] 4 5

Agora se quisermos, por exemplo, acessar o termo que está na terceira linha, na segunda coluna da matriz (elemento 5 da lista) procedemos assim:

Lista[[5]][3,2]
## [1] Inf

Algumas estatísticas

A seguir, alguns exemplos de como calcular desvio padrão e média com funções básicas que vimos anteriormente e, mais a frente, calculando os mesmos parâmetros estatísticos diretamente a partir das funções existentes no R, a função mean() para média, e a função sd() para o desvio padrão.

# R utiliza aritimética vetorial...
# Exemplo: Calculando a média e o desvio-padrão do peso de estudantes...
peso <- c(60,72,57,90,95,72)
peso
## [1] 60 72 57 90 95 72
# Calculando a média (passo-a-passo)
sum(peso)
## [1] 446
sum(peso)/length(peso)
## [1] 74.33333
# Salvando a média no objeto Xbar...
Xbar <- sum(peso)/length(peso)

# Calculando o Desvio-Padrão passo-a-passo...
peso - Xbar
## [1] -14.333333  -2.333333 -17.333333  15.666667  20.666667  -2.333333
(peso - Xbar)^2
## [1] 205.444444   5.444444 300.444444 245.444444 427.111111   5.444444
sum((peso - Xbar)^2)
## [1] 1189.333
DesvPadrao <- sqrt(sum((peso - Xbar)^2)/(length(peso) - 1))
DesvPadrao
## [1] 15.42293
# Como a linguagem R foi desenvolvida para computação estatística,
# muitas funções já estão programadas...
mean(peso)
## [1] 74.33333
sd(peso)
## [1] 15.42293

Verificando objetos na memória e limpando a memória

# Apresentando quantos objetos foram criados
objects()
##  [1] "concatenar"       "Constante"        "Dados"           
##  [4] "derivada"         "DesvPadrao"       "funcaoDerivada"  
##  [7] "funcaoQuadratica" "integral"         "Lista"           
## [10] "Mat1"             "Mat2"             "peso"            
## [13] "Temperatura"      "x"                "Xbar"            
## [16] "y"                "z"
#Limpando da memória apenas os objetos Mat1, Mat2 e Temperatura
rm(Mat1, Mat2,Temperatura) 

#Limpando toda a memória
rm(list=ls(all=TRUE)) # apagando todos os objetos da memória...

LENDO E SALVANDO DADOS DE ARQUIVOS EXTERNOS

Veremos agora como carregar dados externos e salvá-los. Ou seja, como ler um arquivo com dados em formato texto .txt ou Csv .csv.

Um comando muito importante para quem está manipulando arquivos é verificar qual a pasta padrão que o R está utilizando para ler e salvar arquivos.

Para verificar qual a pasta do seu computador está configurada como padrão utilize o comando getwd()

getwd()
## [1] "E:/Blog/2019-04-21"

Pode-se simplesmente colocar os arquivos os quais se pretende ler nesta pasta, ou, pode-se estabelecer outra pasta de trabalho com o comando stwd(“inserir o caminho das pastas”), passando como argumento o caminho ou endereço da pasta desejada.

Apenas a título de exemplo, insiro abaixo o mesmo caminho.

setwd("E:/Blog/2019-04-21")

Carregaremos agora para o R arquivos com as extensões .txt, .csv.

Antes baixe os arquivos dadoschuva.txt e dadoschuva.csv

A partir deste link

E salve-os na pasta que foi configurada como diretório de trabalho do R.

Lendo arquivo .txt

Vamos ler o arquivo dadoschuva.txt com o comando read.table (“nome do arquivo”) e salvar seu conteúdo na variável dadoschuva.

#Veja como e fácil ler um arquivo txt
dadoschuva<-read.table("dadoschuva.txt",sep=",")

Lendo arquivo .csv

Usamos o mesmo comando que foi empregado para ler arquivo txt

#Lendo um arquivo csv
dadoschuva2<-read.table("dadoschuva.csv",sep=",")

Salvando um arquivo .txt

Vamos criar um arquivo txt contendo uma matriz e salvar como um arquivo txt na pasta do diretório corrente. Abaixo a sequência.

#salvando um arquivo txt
sequencia<-seq(1:10)
sequencia
##  [1]  1  2  3  4  5  6  7  8  9 10
matriz<-matrix(sequencia,nrow=10,ncol=2,byrow=TRUE)
write.table(matriz,file="matriz.txt",sep=",",row.names=FALSE,col.names=FALSE)

#salvando um arquivo csv
write.csv(matriz,file="matriz.csv")

MANIPULANDO DADOS

Veja como é fácil manipular os dados

#acessando um elemento específico da matriz ou dataframe
dadoschuva[1,2]
## [1] 0
#Pegando os elementos de uma linha
linha1<-dadoschuva[1,]
linha1
##     V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20
## 1 1962  0  0 41  1  1  0  0  0   0  10   0  31   1   0  33   0   0   0   0
##   V21 V22 V23 V24 V25 V26 V27 V28 V29 V30  V31 V32 V33 V34  V35 V36 V37
## 1   0 1.4 6.2   1   0   0   3  23   0   0 54.4 6.6   0   9 21.2  12  17
##   V38 V39 V40 V41 V42 V43 V44 V45 V46 V47 V48 V49 V50  V51 V52 V53 V54
## 1   0 4.2 7.6 5.2   7 1.6   0   0   0   0   0   0   0 19.8   0   0  39
##    V55 V56 V57 V58 V59 V60 V61 V62 V63 V64 V65 V66  V67  V68  V69 V70  V71
## 1 26.4 2.8   3 0.3   0   0  58  18  12   0   2 1.6 12.2 17.2 11.8 1.2 21.6
##   V72 V73  V74 V75  V76  V77 V78  V79 V80 V81  V82  V83 V84 V85  V86 V87
## 1  11 5.4 11.4  34 52.8 11.6  12 10.6 2.2 3.4 23.8 18.2 3.3 2.6 12.3   0
##   V88 V89 V90  V91 V92  V93 V94 V95 V96 V97 V98  V99 V100 V101 V102 V103
## 1 6.7 5.4 4.8 49.7 8.1 11.1   0   0   0   0  24 44.4 12.1    0   30    0
##   V104 V105 V106 V107 V108 V109 V110 V111 V112 V113 V114 V115 V116 V117
## 1    0    0    0    4    0    0    0    0   27    1    0    0  5.4    1
##   V118 V119 V120 V121 V122 V123 V124 V125 V126 V127 V128 V129 V130 V131
## 1 28.5    0    0    0    0    0    0  1.1  0.2 12.6  3.6 32.2 16.4  4.5
##   V132 V133 V134 V135 V136 V137 V138 V139 V140 V141 V142 V143 V144 V145
## 1  0.7 14.3 30.2  1.6 22.7 15.1 52.8   16 14.9  0.2  0.5    0    0  2.9
##   V146 V147 V148 V149 V150 V151 V152 V153 V154 V155 V156 V157 V158 V159
## 1  1.6  0.6  9.3    0    0    0    0    0    0    0    0    0    0    0
##   V160 V161 V162 V163 V164 V165 V166 V167 V168 V169 V170 V171 V172 V173
## 1    0    0    2    0    0    0    0    0    0    0    0    0    0    0
##   V174 V175 V176 V177 V178 V179 V180 V181 V182 V183 V184 V185 V186 V187
## 1   10  9.2    3    0    0    0    0    0    0    0    0    0    0    0
##   V188 V189 V190 V191 V192 V193 V194 V195 V196 V197 V198 V199 V200 V201
## 1    0    0    0  0.2  0.1    0 32.9  0.7   11    0    0    4 40.4    0
##   V202 V203 V204 V205 V206 V207 V208 V209 V210 V211 V212 V213
## 1    0  3.4   40    0    0    1    0    0    0  2.5    3  4.8
linha2<-dadoschuva[2,]
linha2
##     V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16  V17 V18 V19
## 2 1963  0  0  0  0  0  0  0  0   0   0   0   0   0   0   0 37.5   0   0
##   V20  V21 V22 V23 V24 V25 V26 V27 V28 V29 V30 V31 V32  V33 V34 V35 V36
## 2   0 18.9   0   0   0   0   0   0   0  21   4 0.3 0.8 32.8 0.1  24 2.7
##   V37 V38 V39 V40 V41 V42 V43  V44 V45  V46   V47 V48 V49  V50 V51 V52 V53
## 2   0   0   0   0   2  47 9.6 44.4   0 47.4 132.8   1   0 10.7   0   0   0
##   V54 V55 V56 V57 V58 V59 V60 V61 V62 V63 V64 V65 V66 V67 V68 V69 V70 V71
## 2   0   0   0   0   0   0   0   0   0   0   0   0   0   0 9.8   0   0   0
##   V72 V73 V74 V75 V76  V77 V78  V79 V80 V81  V82  V83   V84  V85 V86 V87
## 2   0   0   0   0   0 33.2   0 54.5 1.9   0 13.5 14.3 106.8 14.1   0   0
##   V88 V89 V90  V91 V92 V93 V94 V95 V96 V97 V98  V99 V100 V101 V102 V103
## 2   0   0   0 12.8 2.1  12 3.2 3.2   0   0 1.5 37.8    0  1.5   11  3.3
##   V104 V105 V106 V107 V108 V109 V110 V111 V112 V113 V114 V115 V116 V117
## 2  3.2  6.5 21.6 20.1 37.3 61.5  5.7    0  9.9 53.8 23.5 22.6 36.2 46.9
##   V118 V119 V120 V121 V122 V123 V124 V125 V126 V127 V128 V129 V130 V131
## 2  4.6    0 18.3    0 21.2  6.8  2.1    0 28.8  0.2  3.3 34.4   54  9.2
##   V132 V133 V134 V135 V136 V137 V138 V139 V140 V141 V142 V143 V144 V145
## 2    0    0    0 31.1   21  3.9  0.2  2.4  7.6    1    0 28.4 24.1 14.2
##   V146 V147 V148 V149 V150 V151 V152 V153 V154 V155 V156 V157 V158 V159
## 2 24.7    0  7.4    0    0   36    0    0    0    0  4.8    0  0.1    0
##   V160 V161 V162 V163 V164 V165 V166 V167 V168 V169 V170 V171 V172 V173
## 2  0.3  0.1    0    0    0    0    0    0    0    0    0 21.3    0 14.2
##   V174 V175 V176 V177 V178 V179 V180 V181 V182 V183  V184 V185 V186 V187
## 2    0    0    0    0    0    0 42.2    1 16.8    0 111.8  0.6 13.8   45
##   V188 V189 V190 V191 V192 V193 V194 V195 V196 V197 V198 V199 V200 V201
## 2  0.8    0    0    0    0    0    0    0    0    0    0    0    0    0
##   V202 V203 V204 V205 V206 V207 V208 V209 V210 V211 V212 V213
## 2    0    0    0    0    0    0    0    0    0  0.1 26.1    0
#Pegando os elementos de uma coluna
coluna1<-dadoschuva[,1]
coluna1
##  [1] 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975
## [15] 1976 1977 1978 1979 1980 1981 1983 1984 1985 1986 1987 1988 1989 1990
## [29] 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004
## [43] 2005 2006 2007 2008 2009
#combinando linhas
combinacao<-rbind(linha1,linha2)
combinacao
##     V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16  V17 V18 V19
## 1 1962  0  0 41  1  1  0  0  0   0  10   0  31   1   0  33  0.0   0   0
## 2 1963  0  0  0  0  0  0  0  0   0   0   0   0   0   0   0 37.5   0   0
##   V20  V21 V22 V23 V24 V25 V26 V27 V28 V29 V30  V31 V32  V33 V34  V35  V36
## 1   0  0.0 1.4 6.2   1   0   0   3  23   0   0 54.4 6.6  0.0 9.0 21.2 12.0
## 2   0 18.9 0.0 0.0   0   0   0   0   0  21   4  0.3 0.8 32.8 0.1 24.0  2.7
##   V37 V38 V39 V40 V41 V42 V43  V44 V45  V46   V47 V48 V49  V50  V51 V52
## 1  17   0 4.2 7.6 5.2   7 1.6  0.0   0  0.0   0.0   0   0  0.0 19.8   0
## 2   0   0 0.0 0.0 2.0  47 9.6 44.4   0 47.4 132.8   1   0 10.7  0.0   0
##   V53 V54  V55 V56 V57 V58 V59 V60 V61 V62 V63 V64 V65 V66  V67  V68  V69
## 1   0  39 26.4 2.8   3 0.3   0   0  58  18  12   0   2 1.6 12.2 17.2 11.8
## 2   0   0  0.0 0.0   0 0.0   0   0   0   0   0   0   0 0.0  0.0  9.8  0.0
##   V70  V71 V72 V73  V74 V75  V76  V77 V78  V79 V80 V81  V82  V83   V84
## 1 1.2 21.6  11 5.4 11.4  34 52.8 11.6  12 10.6 2.2 3.4 23.8 18.2   3.3
## 2 0.0  0.0   0 0.0  0.0   0  0.0 33.2   0 54.5 1.9 0.0 13.5 14.3 106.8
##    V85  V86 V87 V88 V89 V90  V91 V92  V93 V94 V95 V96 V97  V98  V99 V100
## 1  2.6 12.3   0 6.7 5.4 4.8 49.7 8.1 11.1 0.0 0.0   0   0 24.0 44.4 12.1
## 2 14.1  0.0   0 0.0 0.0 0.0 12.8 2.1 12.0 3.2 3.2   0   0  1.5 37.8  0.0
##   V101 V102 V103 V104 V105 V106 V107 V108 V109 V110 V111 V112 V113 V114
## 1  0.0   30  0.0  0.0  0.0  0.0  4.0  0.0  0.0  0.0    0 27.0  1.0  0.0
## 2  1.5   11  3.3  3.2  6.5 21.6 20.1 37.3 61.5  5.7    0  9.9 53.8 23.5
##   V115 V116 V117 V118 V119 V120 V121 V122 V123 V124 V125 V126 V127 V128
## 1  0.0  5.4  1.0 28.5    0  0.0    0  0.0  0.0  0.0  1.1  0.2 12.6  3.6
## 2 22.6 36.2 46.9  4.6    0 18.3    0 21.2  6.8  2.1  0.0 28.8  0.2  3.3
##   V129 V130 V131 V132 V133 V134 V135 V136 V137 V138 V139 V140 V141 V142
## 1 32.2 16.4  4.5  0.7 14.3 30.2  1.6 22.7 15.1 52.8 16.0 14.9  0.2  0.5
## 2 34.4 54.0  9.2  0.0  0.0  0.0 31.1 21.0  3.9  0.2  2.4  7.6  1.0  0.0
##   V143 V144 V145 V146 V147 V148 V149 V150 V151 V152 V153 V154 V155 V156
## 1  0.0  0.0  2.9  1.6  0.6  9.3    0    0    0    0    0    0    0  0.0
## 2 28.4 24.1 14.2 24.7  0.0  7.4    0    0   36    0    0    0    0  4.8
##   V157 V158 V159 V160 V161 V162 V163 V164 V165 V166 V167 V168 V169 V170
## 1    0  0.0    0  0.0  0.0    2    0    0    0    0    0    0    0    0
## 2    0  0.1    0  0.3  0.1    0    0    0    0    0    0    0    0    0
##   V171 V172 V173 V174 V175 V176 V177 V178 V179 V180 V181 V182 V183  V184
## 1  0.0    0  0.0   10  9.2    3    0    0    0  0.0    0  0.0    0   0.0
## 2 21.3    0 14.2    0  0.0    0    0    0    0 42.2    1 16.8    0 111.8
##   V185 V186 V187 V188 V189 V190 V191 V192 V193 V194 V195 V196 V197 V198
## 1  0.0  0.0    0  0.0    0    0  0.2  0.1    0 32.9  0.7   11    0    0
## 2  0.6 13.8   45  0.8    0    0  0.0  0.0    0  0.0  0.0    0    0    0
##   V199 V200 V201 V202 V203 V204 V205 V206 V207 V208 V209 V210 V211 V212
## 1    4 40.4    0    0  3.4   40    0    0    1    0    0    0  2.5  3.0
## 2    0  0.0    0    0  0.0    0    0    0    0    0    0    0  0.1 26.1
##   V213
## 1  4.8
## 2  0.0
#Removendo uma coluna
combinacao<-combinacao[,-1]
combinacao
##   V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16  V17 V18 V19 V20
## 1  0  0 41  1  1  0  0  0   0  10   0  31   1   0  33  0.0   0   0   0
## 2  0  0  0  0  0  0  0  0   0   0   0   0   0   0   0 37.5   0   0   0
##    V21 V22 V23 V24 V25 V26 V27 V28 V29 V30  V31 V32  V33 V34  V35  V36 V37
## 1  0.0 1.4 6.2   1   0   0   3  23   0   0 54.4 6.6  0.0 9.0 21.2 12.0  17
## 2 18.9 0.0 0.0   0   0   0   0   0  21   4  0.3 0.8 32.8 0.1 24.0  2.7   0
##   V38 V39 V40 V41 V42 V43  V44 V45  V46   V47 V48 V49  V50  V51 V52 V53
## 1   0 4.2 7.6 5.2   7 1.6  0.0   0  0.0   0.0   0   0  0.0 19.8   0   0
## 2   0 0.0 0.0 2.0  47 9.6 44.4   0 47.4 132.8   1   0 10.7  0.0   0   0
##   V54  V55 V56 V57 V58 V59 V60 V61 V62 V63 V64 V65 V66  V67  V68  V69 V70
## 1  39 26.4 2.8   3 0.3   0   0  58  18  12   0   2 1.6 12.2 17.2 11.8 1.2
## 2   0  0.0 0.0   0 0.0   0   0   0   0   0   0   0 0.0  0.0  9.8  0.0 0.0
##    V71 V72 V73  V74 V75  V76  V77 V78  V79 V80 V81  V82  V83   V84  V85
## 1 21.6  11 5.4 11.4  34 52.8 11.6  12 10.6 2.2 3.4 23.8 18.2   3.3  2.6
## 2  0.0   0 0.0  0.0   0  0.0 33.2   0 54.5 1.9 0.0 13.5 14.3 106.8 14.1
##    V86 V87 V88 V89 V90  V91 V92  V93 V94 V95 V96 V97  V98  V99 V100 V101
## 1 12.3   0 6.7 5.4 4.8 49.7 8.1 11.1 0.0 0.0   0   0 24.0 44.4 12.1  0.0
## 2  0.0   0 0.0 0.0 0.0 12.8 2.1 12.0 3.2 3.2   0   0  1.5 37.8  0.0  1.5
##   V102 V103 V104 V105 V106 V107 V108 V109 V110 V111 V112 V113 V114 V115
## 1   30  0.0  0.0  0.0  0.0  4.0  0.0  0.0  0.0    0 27.0  1.0  0.0  0.0
## 2   11  3.3  3.2  6.5 21.6 20.1 37.3 61.5  5.7    0  9.9 53.8 23.5 22.6
##   V116 V117 V118 V119 V120 V121 V122 V123 V124 V125 V126 V127 V128 V129
## 1  5.4  1.0 28.5    0  0.0    0  0.0  0.0  0.0  1.1  0.2 12.6  3.6 32.2
## 2 36.2 46.9  4.6    0 18.3    0 21.2  6.8  2.1  0.0 28.8  0.2  3.3 34.4
##   V130 V131 V132 V133 V134 V135 V136 V137 V138 V139 V140 V141 V142 V143
## 1 16.4  4.5  0.7 14.3 30.2  1.6 22.7 15.1 52.8 16.0 14.9  0.2  0.5  0.0
## 2 54.0  9.2  0.0  0.0  0.0 31.1 21.0  3.9  0.2  2.4  7.6  1.0  0.0 28.4
##   V144 V145 V146 V147 V148 V149 V150 V151 V152 V153 V154 V155 V156 V157
## 1  0.0  2.9  1.6  0.6  9.3    0    0    0    0    0    0    0  0.0    0
## 2 24.1 14.2 24.7  0.0  7.4    0    0   36    0    0    0    0  4.8    0
##   V158 V159 V160 V161 V162 V163 V164 V165 V166 V167 V168 V169 V170 V171
## 1  0.0    0  0.0  0.0    2    0    0    0    0    0    0    0    0  0.0
## 2  0.1    0  0.3  0.1    0    0    0    0    0    0    0    0    0 21.3
##   V172 V173 V174 V175 V176 V177 V178 V179 V180 V181 V182 V183  V184 V185
## 1    0  0.0   10  9.2    3    0    0    0  0.0    0  0.0    0   0.0  0.0
## 2    0 14.2    0  0.0    0    0    0    0 42.2    1 16.8    0 111.8  0.6
##   V186 V187 V188 V189 V190 V191 V192 V193 V194 V195 V196 V197 V198 V199
## 1  0.0    0  0.0    0    0  0.2  0.1    0 32.9  0.7   11    0    0    4
## 2 13.8   45  0.8    0    0  0.0  0.0    0  0.0  0.0    0    0    0    0
##   V200 V201 V202 V203 V204 V205 V206 V207 V208 V209 V210 V211 V212 V213
## 1 40.4    0    0  3.4   40    0    0    1    0    0    0  2.5  3.0  4.8
## 2  0.0    0    0  0.0    0    0    0    0    0    0    0  0.1 26.1  0.0
#combinando colunas
doisprimeirosdias<-cbind(dadoschuva[,2],dadoschuva[,3])
doisprimeirosdias
##       [,1] [,2]
##  [1,]  0.0  0.0
##  [2,]  0.0  0.0
##  [3,]  0.0  0.0
##  [4,]  0.6  8.4
##  [5,]  6.4  6.0
##  [6,]  0.0  0.0
##  [7,]  3.8  0.2
##  [8,]  0.0  0.0
##  [9,]  0.0  4.7
## [10,]  0.1  2.0
## [11,]  3.5 22.2
## [12,] 39.1  0.0
## [13,]  0.0  0.0
## [14,]  0.0  0.0
## [15,]  0.0  0.0
## [16,] 10.8  7.6
## [17,]  0.0  0.0
## [18,]  0.0  0.0
## [19,]  0.0  0.0
## [20,]  0.0 12.6
## [21,]  0.0  0.0
## [22,]  5.9 25.2
## [23,]  0.0  1.4
## [24,]  0.0  0.0
## [25,]  0.0 23.6
## [26,]  0.7  0.4
## [27,]  8.0  1.6
## [28,]  0.0  0.4
## [29,]  0.1 97.0
## [30,] 14.0  0.0
## [31,]  0.4  1.1
## [32,]  0.0  0.0
## [33,]  0.0  0.0
## [34,]  0.0  0.0
## [35,]  0.0  0.0
## [36,]  0.0  7.7
## [37,]  2.2  6.1
## [38,]  0.0  0.0
## [39,]  0.0  0.5
## [40,]  0.0  0.0
## [41,]  0.2  0.0
## [42,]  0.0  0.0
## [43,]  9.5  0.0
## [44,]  0.3  2.8
## [45,]  0.0  4.7
## [46,]  0.0 13.7
## [47,]  0.0  0.0

VERIFICANDO ALGUMAS ESTATÍSTICAS

chuva<-dadoschuva[,-1]

#total anual de chuva
chuvaano<-rowSums(chuva)
chuvaano
##  [1] 1445.3 1806.2 1686.6 1790.9 1399.1 1378.9 1262.0 1768.7 1275.4 1317.0
## [11] 1800.2 1287.5 1257.5 1280.6 1183.1 1420.5 1281.7 1751.4 1205.9 1870.8
## [21] 1335.9 1212.7 1132.2 1159.6 1682.2 1390.4 1420.4 1512.5 1767.3 1340.0
## [31] 1365.7 1269.2 1048.9 1501.1 1154.6 1063.0 1321.3 1211.0 1188.8 1252.6
## [41] 1737.4 1239.9 1420.6 1524.0 1406.2 1451.4 1395.3
#media anual dos totais de chuva
mean(chuvaano)
## [1] 1403.691
#desvio padrao dos totais de chuva
sd(chuvaano)
## [1] 219.8143
#maior chuva anual
max(chuvaano)
## [1] 1870.8
#menor chuva anual
min(chuvaano)
## [1] 1048.9
#mediana da chuva anual
median(chuvaano)
## [1] 1365.7

EXTRAS - UM POUCO MAIS DE GRÁFICOS

#Plotando os totais de chuva em função dos anos

#Uma plotagem simples e rápida
plot(chuvaano)

#Uma plotagem mais sofisticada
ano<-dadoschuva[,1]
plot(ano,chuvaano,xlab="Ano",ylab="Total anual de chuva (mm)",main="Total Anual de Chuva",pch=16)
lines(ano,chuvaano,col="darkred")

Fazendo o gráfico de uma função 3D

#Carrega pacote graphics
require(graphics)

#Define a função 3D
f<-function(x1,y1) {(1-x1)^2+100*(y1-x1^2)^2}

#Atribui valores para x e y
x<-seq(-2,2,by=0.15)
y<-seq(-1,3,by=0.15)
x
##  [1] -2.00 -1.85 -1.70 -1.55 -1.40 -1.25 -1.10 -0.95 -0.80 -0.65 -0.50
## [12] -0.35 -0.20 -0.05  0.10  0.25  0.40  0.55  0.70  0.85  1.00  1.15
## [23]  1.30  1.45  1.60  1.75  1.90
y
##  [1] -1.00 -0.85 -0.70 -0.55 -0.40 -0.25 -0.10  0.05  0.20  0.35  0.50
## [12]  0.65  0.80  0.95  1.10  1.25  1.40  1.55  1.70  1.85  2.00  2.15
## [23]  2.30  2.45  2.60  2.75  2.90
#Calcula o valor da função em um ponto
f(-2,-0.70)
## [1] 2218
#Salva as coordenadas z referentes ao conjunto de pares ordenados x e y criados
z<-outer(x,y,f)

#Plota o gráfico
persp(x,y,z,phi=45,theta=-100,col="yellow",shade=0.5,ticktype="detailed")