Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
| — | 03_apostila:04-dados [2023/08/15 21:33] (atual) – criada - edição externa 127.0.0.1 | ||
|---|---|---|---|
| Linha 1: | Linha 1: | ||
| + | <WRAP tabs> | ||
| + | * [[02_tutoriais: | ||
| + | * [[01_curso_atual: | ||
| + | * [[03_apostila: | ||
| + | </ | ||
| + | ====== 3. Leitura e Manipulação de Dados ====== | ||
| + | ===== Leitura de Dados ===== | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Entrada de Dados Diretamente no R ==== | ||
| + | |||
| + | === Função '' | ||
| + | As funções de criação de vetores já foram detalhadas na seção [[03-funcoes# | ||
| + | |||
| + | <code rsplus> | ||
| + | > meu.vetor <- c(10.5, | ||
| + | > meu.vetor | ||
| + | [1] 10.5 11.3 12.4 5.7 | ||
| + | > | ||
| + | > vetor.vazio <- c() | ||
| + | > vetor.vazio | ||
| + | NULL | ||
| + | </ | ||
| + | |||
| + | === Função '' | ||
| + | A função '' | ||
| + | |||
| + | <code rsplus> | ||
| + | > minha.matriz <- matrix(data=1: | ||
| + | > minha.matriz | ||
| + | [,1] [,2] [,3] [,4] | ||
| + | [1,] 1 4 7 10 | ||
| + | [2,] 2 5 8 11 | ||
| + | [3,] 3 6 9 12 | ||
| + | </ | ||
| + | |||
| + | Como o //default// do argumento '' | ||
| + | <code rsplus> | ||
| + | > matriz.vazia <- matrix(nrow=3, | ||
| + | > matriz.vazia | ||
| + | [,1] [,2] [,3] [,4] | ||
| + | [1,] | ||
| + | [2,] | ||
| + | [3,] | ||
| + | </ | ||
| + | |||
| + | Também por // | ||
| + | <code rsplus> | ||
| + | > minha.matriz <- matrix(data=1: | ||
| + | > minha.matriz | ||
| + | [,1] [,2] [,3] [,4] | ||
| + | [1,] 1 2 3 4 | ||
| + | [2,] 5 6 7 8 | ||
| + | [3,] 9 | ||
| + | </ | ||
| + | |||
| + | Se o argumento '' | ||
| + | |||
| + | <code rsplus> | ||
| + | > elementos <- matrix(c(" | ||
| + | Warning message: | ||
| + | comprimento dos dados [5] não é um submúltiplo ou múltiplo do número de linhas [4] na matrix | ||
| + | > elementos | ||
| + | | ||
| + | [1,] " | ||
| + | [2,] " | ||
| + | [3,] " | ||
| + | [4,] " | ||
| + | </ | ||
| + | |||
| + | === Função '' | ||
| + | Com a função '' | ||
| + | <code rsplus> | ||
| + | > nome <- c(" | ||
| + | > ano.nasc <- c(1936, | ||
| + | > vive <- c(" | ||
| + | > trapalhoes <- data.frame(nomes, | ||
| + | > trapalhoes | ||
| + | nomes ano.nasc vive | ||
| + | 1 | ||
| + | 2 | ||
| + | 3 | ||
| + | 4 Zacarias | ||
| + | > | ||
| + | # O mesmo, em um só comando: | ||
| + | > trapalhoes <- data.frame(nomes=c(" | ||
| + | </ | ||
| + | |||
| + | === Função '' | ||
| + | Esta função abre uma interface simples de edição de dados em formato planilha, e é útil para pequenas modificações. Mas para salvar as modificações atribua o resultado da função '' | ||
| + | <code rsplus> | ||
| + | trapalhoes.2< | ||
| + | </ | ||
| + | {{: | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Dados que já Estão em Arquivos==== | ||
| + | === Leitura e Exportação de Arquivos-Texto: | ||
| + | Para conjuntos de dados grandes, é mais prático gerar um arquivo de texto (ASCII) a partir de uma planilha ou banco de dados, e usar a função '' | ||
| + | |||
| + | Para criar um objeto com os dados do arquivo {{: | ||
| + | <code rsplus> | ||
| + | > gbmam93 <- read.table(file=" | ||
| + | > gbmam93 | ||
| + | a b c d e f g h i j k l m n o p q r s | ||
| + | 1 1 1 1 0 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 | ||
| + | 2 1 1 0 1 1 0 1 0 1 0 0 1 1 0 1 1 1 1 1 | ||
| + | 3 1 0 0 1 1 0 1 0 1 0 0 1 1 1 1 1 1 1 1 | ||
| + | 4 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 | ||
| + | 5 1 0 0 1 1 0 1 0 1 0 0 1 1 0 0 0 1 0 0 | ||
| + | 6 1 1 1 0 1 0 1 1 0 0 0 1 1 1 1 1 1 1 1 | ||
| + | 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 | ||
| + | 8 1 0 1 1 1 0 0 0 1 0 0 1 1 0 0 1 1 0 1 | ||
| + | 9 1 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 | ||
| + | 10 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 0 0 | ||
| + | 11 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 | ||
| + | 12 1 0 0 1 1 0 0 0 1 0 0 1 0 0 0 0 0 0 1 | ||
| + | 13 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 | ||
| + | 14 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 | ||
| + | </ | ||
| + | O argumento '' | ||
| + | |||
| + | Esses e os outros argumentos da função a tornam extremamente flexível para ler dados em arquivos texto. Consulte a ajuda para mais informações, | ||
| + | |||
| + | Para exportar um objeto para um arquivo texto, use a função '' | ||
| + | |||
| + | === Conjuntos de Dados Distribuídos com os Pacotes do R === | ||
| + | Muitos pacotes do R incluem conjuntos de dados para exemplos, treinamento e verificação de análises. Se o pacote já está carregado (funções '' | ||
| + | <code rsplus> | ||
| + | > lynx | ||
| + | Time Series: | ||
| + | Start = 1821 | ||
| + | End = 1934 | ||
| + | Frequency = 1 | ||
| + | [1] 269 321 585 871 1475 2821 3928 5943 4950 2577 523 | ||
| + | [16] 2285 2685 3409 1824 409 151 | ||
| + | | ||
| + | [46] 6721 4254 687 255 473 358 784 1594 1676 2251 1426 756 299 201 229 | ||
| + | | ||
| + | [76] 3495 587 105 153 387 758 1307 3465 6991 6313 3794 1836 345 382 808 | ||
| + | [91] 1388 2713 3800 3091 2985 3790 674 | ||
| + | [106] 2935 1537 529 485 662 1000 1590 2657 3396 | ||
| + | </ | ||
| + | |||
| + | Como qualquer objeto de um pacote, '' | ||
| + | |||
| + | <code rsplus> | ||
| + | lynx {datasets} | ||
| + | |||
| + | Annual Canadian Lynx trappings 1821-1934 | ||
| + | |||
| + | Description: | ||
| + | |||
| + | | ||
| + | from Brockwell & Davis (1991), this appears to be the series | ||
| + | | ||
| + | |||
| + | Usage: | ||
| + | |||
| + | lynx | ||
| + | |||
| + | Source: | ||
| + | |||
| + | | ||
| + | | ||
| + | 557). | ||
| + | |||
| + | References: | ||
| + | |||
| + | | ||
| + | | ||
| + | |||
| + | | ||
| + | work on the Mackenzie River series of annual Canadian lynx | ||
| + | | ||
| + | the Royal Statistical Society series A, 140, 411-431. | ||
| + | </ | ||
| + | |||
| + | |||
| + | A página de ajuda mostra que o objeto de dados '' | ||
| + | <code rsplus> | ||
| + | help(datasets) | ||
| + | </ | ||
| + | |||
| + | Esse pacote faz parte da distribuição básica do R, e é carregado automaticamente quando se executa o R: | ||
| + | <code rsplus> | ||
| + | > search() | ||
| + | [1] " | ||
| + | [4] " | ||
| + | [7] " | ||
| + | </ | ||
| + | Para fazer uma cópia de um objeto de dados de um pacote em sua área de trabalho, use a função '' | ||
| + | |||
| + | <code rsplus> | ||
| + | > ls() | ||
| + | [1] " | ||
| + | > data(lynx) | ||
| + | > ls() | ||
| + | [1] " | ||
| + | > data(BCI, | ||
| + | > ls() | ||
| + | [1] " | ||
| + | </ | ||
| + | |||
| + | No segundo caso, o pacote //vegan//, que tem o conjunto de dados, não está carregado e por isso deve ser indicado no argumento '' | ||
| + | |||
| + | === Importação de Arquivos de Outros Pacotes Estatísticos === | ||
| + | O pacote //foreign// contém funções para importar e exportar diretamente arquivos de pacotes estatísticos. | ||
| + | |||
| + | Como é um pacote recomendado pelo //R Core Team//, faz parte da distribuição básica do R, e provavelmente está disponível **mas precisa ser carregado** com o comando '' | ||
| + | |||
| + | Para mais informações, | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Exercícios ==== | ||
| + | <WRAP center round tip 60%> | ||
| + | Os exercícios **103.1** e **103.2** estão disponíveis no NotaR, um sistema automático de correção de exercícios. Caso esteja fazendo "o curso" do R é preciso postá-lo nesse sistema. Caso não esteja, poste o código no sistema para saber seu aproveitamento. | ||
| + | |||
| + | * [[http:// | ||
| + | </ | ||
| + | |||
| + | |||
| + | <box left | // | ||
| + | Abaixo as distâncias por estradas entre quatro cidades da Europa, em quilômetros: | ||
| + | |||
| + | |||
| + | * Atenas a Madri: 3949 | ||
| + | * Atenas a Paris: 3000 | ||
| + | * Atenas a Estocolmo: 3927 | ||
| + | * Madri a Paris: 1273 | ||
| + | * Madri a Estocolmo: 3188 | ||
| + | * Paris a Estocolmo: 1827 | ||
| + | |||
| + | - Construa uma matriz de distâncias com esses valores. | ||
| + | - Compare sua matriz com objeto '' | ||
| + | </ | ||
| + | |||
| + | |||
| + | <box left | // | ||
| + | Imagine um experimento em que hamsters de dois fenótipos (claros e escuros) recebem três tipos diferentes de dieta, e no qual as diferenças dos pesos (g) entre o fim e o início do experimento sejam: | ||
| + | |||
| + | | ^ DIETA A ^ DIETA B ^ DIETA C ^ | ||
| + | ^CLAROS| 0.1 1.1 3.7 | 5.7 | ||
| + | ^ESCUROS| 1.5 | ||
| + | |||
| + | - Crie um //data frame// com esses dados, na qual cada hamster seja uma linha, e as colunas sejam as variáveis cor, dieta e variação do peso. | ||
| + | |||
| + | **DICA:** Use as funções de gerar repetições para criar os vetores dos tratamentos. | ||
| + | </ | ||
| + | |||
| + | <box left | // | ||
| + | Crie um objeto com os dados do arquivo [[: | ||
| + | </ | ||
| + | |||
| + | <box left | // | ||
| + | - Descubra um objeto de dados de um pacote já carregado no R, e carregue esse pacote em sua área de trabalho. | ||
| + | - Faça o mesmo para um pacote que está disponível em sua instalação de R, mas **não** está carregado. | ||
| + | - Por que dados de pacotes carregados não são exibidos pelo comando '' | ||
| + | - Consulte a página de ajuda da função '' | ||
| + | |||
| + | |||
| + | **DICAS**: | ||
| + | * O comando '' | ||
| + | * Para listar os objetos de dados nos pacotes carregados, use '' | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Tipos de Objetos de Dados ===== | ||
| + | |||
| + | Vetores, matrizes e listas são objetos com características diferentes, formalmente definidas no R como // | ||
| + | |||
| + | O que é importante reter aqui é que os resultados que obtemos de um comando no R (incluindo as mensagens de erro!) são em boa parte definidas pelo objeto de dados, e não apenas pela função. Por isso, quando enfrentar algum problema, verifique com cuidado na documentação se o seu comando se aplica à classe de objeto de dados que você está usando e, se sim, como.((em termos técnicos: verifique se e como a função usada define um método para o objeto de dados usado)) | ||
| + | |||
| + | ==== Atributos de um Objeto de Dados ==== | ||
| + | |||
| + | Todo objeto no R tem dois atributos básicos, que são o tipo de dado((em termos técnicos, trata-se do modo de armazenamento, | ||
| + | <code rsplus> | ||
| + | > pares | ||
| + | [1] 2 4 6 8 10 | ||
| + | > mode(pares) | ||
| + | [1] " | ||
| + | > length(pares) | ||
| + | [1] 5 | ||
| + | </ | ||
| + | |||
| + | Objetos também podem ter uma ou mais classes. Um vetor numérico pode ser da classe dos inteiros ou da classe dos fatores. Um objeto da classe matriz pode ter dados do tipo numérico, lógicos((V= verdadeiro ou F = Falso)) ou caracteres. O comando '' | ||
| + | <code rsplus> | ||
| + | > matriz.letras | ||
| + | [,1] [,2] [,3] [,4] | ||
| + | [1,] " | ||
| + | [2,] " | ||
| + | [3,] " | ||
| + | > mode(matriz.letras) | ||
| + | [1] " | ||
| + | > class(matriz.letras) | ||
| + | [1] " | ||
| + | > matriz.numeros | ||
| + | [,1] [,2] [,3] [,4] | ||
| + | [1,] 1 2 3 4 | ||
| + | [2,] 1 2 3 4 | ||
| + | [3,] 1 2 3 4 | ||
| + | > mode(matriz.numeros) | ||
| + | [1] " | ||
| + | > class(matriz.numeros) | ||
| + | [1] " | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Vetores ==== | ||
| + | |||
| + | São um conjunto de elementos do mesmo tipo, como números ou caracteres. Há várias classes de vetores. Os vetores que temos trabalhado até agora são numéricos: | ||
| + | <code rsplus> | ||
| + | > class( a ) | ||
| + | [1] " | ||
| + | > class( b ) | ||
| + | [1] " | ||
| + | > class( c ) | ||
| + | [1] " | ||
| + | </ | ||
| + | |||
| + | A classe ''' | ||
| + | |||
| + | É possível ter no R um vetor tipo ''' | ||
| + | <code rsplus> | ||
| + | > sp = c( " | ||
| + | > mode( sp ) | ||
| + | [1] " | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Vetores da Classe Fator e as Funções '' | ||
| + | Os fatores são uma classe especial de vetores, que definem variáveis categóricas de classificação, | ||
| + | |||
| + | A função '' | ||
| + | |||
| + | <code rsplus> | ||
| + | > sexo <- factor(rep(c(" | ||
| + | > sexo | ||
| + | [1] M M M M M M M M M F F F F F F F F F | ||
| + | Levels: F M | ||
| + | > | ||
| + | > numeros <- rep(1: | ||
| + | > numeros | ||
| + | [1] 1 1 1 2 2 2 3 3 3 | ||
| + | > numeros.f <- factor(numeros) | ||
| + | > numeros.f | ||
| + | [1] 1 1 1 2 2 2 3 3 3 | ||
| + | Levels: 1 2 3 | ||
| + | </ | ||
| + | |||
| + | Em muitos casos, indicar que um vetor é um fator é importante para a análise, e várias funções no R exigem variáveis dessa classe, ou têm respostas específicas para ela ((em termos técnicos, dizemos que há métodos para cada classe de objeto, e que algumas funções têm métodos específicos para fatores, ou só têm para essa classe. Veja a seção sobre programação para detalhes)). | ||
| + | |||
| + | Note que fatores têm um atributo que especifica seus níveis ou categorias ('' | ||
| + | <code rsplus> | ||
| + | > tratamentos <- factor(rep(c(" | ||
| + | > tratamentos | ||
| + | [1] Controle Controle Controle Controle Adubo A Adubo A Adubo A Adubo A | ||
| + | [9] Adubo B Adubo B Adubo B Adubo B | ||
| + | Levels: Adubo A Adubo B Controle | ||
| + | > | ||
| + | > tratamentos <- factor(rep(c(" | ||
| + | > tratamentos | ||
| + | [1] Controle Controle Controle Controle Adubo A Adubo A Adubo A Adubo A | ||
| + | [9] Adubo B Adubo B Adubo B Adubo B | ||
| + | Levels: Controle Adubo A Adubo B | ||
| + | </ | ||
| + | |||
| + | Há ainda a função '' | ||
| + | |||
| + | <code rsplus> | ||
| + | > tratamentos <- factor(rep(1: | ||
| + | > tratamentos | ||
| + | [1] 1 1 1 1 2 2 2 2 3 3 3 3 | ||
| + | Levels: 1 2 3 | ||
| + | > | ||
| + | > levels(tratamentos) | ||
| + | [1] " | ||
| + | </ | ||
| + | |||
| + | Fatores podem conter níveis não usados (vazios): | ||
| + | <code rsplus> | ||
| + | > politicos <- factor(rep(" | ||
| + | > politicos | ||
| + | [1] corrupto corrupto corrupto corrupto corrupto corrupto corrupto corrupto | ||
| + | [9] corrupto corrupto | ||
| + | Levels: corrupto honesto | ||
| + | </ | ||
| + | |||
| + | <box center 50% red| **Duas Coisa que Você Precisa Saber sobre Fatores**> | ||
| + | * Um fator pode ter níveis para os quais não há valores. Isso pode acontecer quando alguns valores são selecionados ou excluídos (ver item sobre [[04-dados# | ||
| + | * Em versões mais antigas do R, a função '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | === A função '' | ||
| + | Para aplicar uma função aos subconjuntos de um vetor definidos por um fator use a função '' | ||
| + | <code rsplus> | ||
| + | > pop.2007 | ||
| + | Feira de Santana | ||
| + | 544113 | ||
| + | Nova Iguaçu | ||
| + | 858150 | ||
| + | Sorocaba | ||
| + | 590846 | ||
| + | Jaboatão | ||
| + | 661901 | ||
| + | > regiao | ||
| + | [1] NE NE SE SE SE NE SE SE SE SE SE SE NE | ||
| + | Levels: NE SE | ||
| + | |||
| + | ##Soma do número de habitantes das cidades por região | ||
| + | > tapply(X=pop.2007, | ||
| + | NE SE | ||
| + | | ||
| + | |||
| + | #Número de habitantes da cidade mais populosa de cada região | ||
| + | > tapply(X=pop.2007, | ||
| + | NE SE | ||
| + | | ||
| + | |||
| + | </ | ||
| + | |||
| + | Os argumentos básicos são o vetor de valores ('' | ||
| + | |||
| + | <code rsplus> | ||
| + | > sexo <- factor(rep(c(" | ||
| + | > dieta <- factor(rep(rep(c(" | ||
| + | > peso <- c(65, | ||
| + | > sexo | ||
| + | [1] F F F F F F F F F M M M M M M M M M | ||
| + | Levels: F M | ||
| + | > dieta | ||
| + | [1] normal normal normal light light light diet | ||
| + | [11] normal normal light light light diet | ||
| + | Levels: normal light diet | ||
| + | > peso | ||
| + | [1] 65 69 83 90 58 84 85 74 92 71 72 78 67 65 62 74 73 68 | ||
| + | > ##Media de peso por sexo e dieta | ||
| + | > tapply(peso, | ||
| + | diet light | ||
| + | F 83.66667 77.33333 72.33333 | ||
| + | M 71.66667 64.66667 73.66667 | ||
| + | </ | ||
| + | |||
| + | === A função '' | ||
| + | Para contar elementos em cada nível de um fator, use a função '' | ||
| + | <code rsplus> | ||
| + | > table(politicos) | ||
| + | politicos | ||
| + | corrupto | ||
| + | 10 0 | ||
| + | </ | ||
| + | |||
| + | A função pode fazer tabulações cruzadas, gerando uma tabela de contingência((em termos técnicos, a função table retorna um " | ||
| + | |||
| + | <code rsplus> | ||
| + | > table(sexo, | ||
| + | dieta | ||
| + | sexo normal light diet | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | A função '' | ||
| + | |||
| + | <code rsplus> | ||
| + | > x <- rep(1: | ||
| + | > class(x) | ||
| + | [1] " | ||
| + | > table(x) | ||
| + | x | ||
| + | | ||
| + | 10 10 10 10 10 | ||
| + | |||
| + | > y <- rep(c(" | ||
| + | > class(y) | ||
| + | [1] " | ||
| + | > table(y) | ||
| + | y | ||
| + | | ||
| + | 20 20 20 | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Listas ==== | ||
| + | |||
| + | Uma lista é um objeto composto de vetores que podem ser diferentes classes e tamanhos, e podem ser criadas com o comando '' | ||
| + | <code rsplus> | ||
| + | > minha.lista <- list(um.vetor=1: | ||
| + | > minha.lista | ||
| + | $um.vetor | ||
| + | [1] 1 2 3 4 5 | ||
| + | |||
| + | $uma.matriz | ||
| + | [,1] [,2] [,3] | ||
| + | [1,] 1 3 5 | ||
| + | [2,] 2 4 6 | ||
| + | |||
| + | $um.dframe | ||
| + | seculo inicio | ||
| + | 1 XIX 1801 | ||
| + | 2 | ||
| + | 3 XXI 2001 | ||
| + | |||
| + | </ | ||
| + | |||
| + | Nas palavras de Bill Venables, listas são como " | ||
| + | |||
| + | <code rsplus> | ||
| + | super.lista <- list(lista.velha=minha.lista, | ||
| + | </ | ||
| + | |||
| + | Alguns objetos têm como atributo o nome de seus elementos, como é o caso das listas. A função '' | ||
| + | <code rsplus> | ||
| + | > names(minha.lista) | ||
| + | [1] " | ||
| + | > | ||
| + | > names(super.lista) | ||
| + | [1] " | ||
| + | </ | ||
| + | |||
| + | === Seleção Rápida de um Objeto em uma Lista === | ||
| + | |||
| + | O operador '' | ||
| + | |||
| + | <code rsplus> | ||
| + | > minha.lista$um.vetor | ||
| + | [1] 1 2 3 4 5 | ||
| + | > | ||
| + | > names(super.lista) | ||
| + | [1] " | ||
| + | > | ||
| + | > names(super.lista$lista.velha) | ||
| + | [1] " | ||
| + | > | ||
| + | > names(super.lista$lista.velha$um.dframe) | ||
| + | [1] " | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Data Frames ==== | ||
| + | |||
| + | A tabela de dados (//data frame//) é um tipo especial de lista, composta por vetores de mesmo tamanho, mas que podem ser de classes diferentes: | ||
| + | |||
| + | <code rsplus> | ||
| + | > names(trapalhoes) | ||
| + | [1] " | ||
| + | > | ||
| + | > trapalhoes | ||
| + | nomes ano.nasc | ||
| + | 1 | ||
| + | 2 | ||
| + | 3 | ||
| + | 4 Zacarias | ||
| + | > | ||
| + | > class(trapalhoes$nomes) | ||
| + | [1] " | ||
| + | > class(trapalhoes$ano.nasc) | ||
| + | [1] " | ||
| + | > class(trapalhoes$vive) | ||
| + | [1] " | ||
| + | </ | ||
| + | |||
| + | === Seleção Rápida de Variáveis em Data Frames === | ||
| + | |||
| + | Todas as operações já descritas para listas são válidas para os //data frames// | ||
| + | |||
| + | Assim como para listas, o operador '' | ||
| + | |||
| + | Esse operador também pode ser usado para criar novas variáveis (vetores) e acrescentá-las ao objeto. Para isso, basta acrescentar após o operador o nome da nova variável, e atribuir a ela um valor: | ||
| + | |||
| + | <code rsplus> | ||
| + | > trapalhoes$idade.2008 <- 2008 - trapalhoes$ano.nasc | ||
| + | > trapalhoes | ||
| + | nomes ano.nasc | ||
| + | 1 | ||
| + | 2 | ||
| + | 3 | ||
| + | 4 Zacarias | ||
| + | |||
| + | </ | ||
| + | |||
| + | === A Função '' | ||
| + | |||
| + | A função '' | ||
| + | |||
| + | Como seu resultado é sempre um //data frame//, a função '' | ||
| + | <code rsplus> | ||
| + | > carros.marcas | ||
| + | [1] Chevrolet Chevrolet Chevrolet Chevrolet Chevrolet Chevrolet Chevrolet | ||
| + | [8] Chevrolet Ford Ford Ford Ford Ford Ford | ||
| + | [15] Ford Ford Toyota | ||
| + | Levels: Chevrolet Ford Toyota | ||
| + | > carros.numeros | ||
| + | Price Horsepower Weight | ||
| + | 12 13.4 110 2490 | ||
| + | 13 11.4 110 2785 | ||
| + | 14 15.1 160 3240 | ||
| + | 15 15.9 110 3195 | ||
| + | 16 16.3 170 3715 | ||
| + | 17 16.6 165 4025 | ||
| + | 18 18.8 170 3910 | ||
| + | 19 38.0 300 3380 | ||
| + | 31 | ||
| + | 32 10.1 127 2530 | ||
| + | 33 11.3 | ||
| + | 34 15.9 105 2850 | ||
| + | 35 14.0 115 2710 | ||
| + | 36 19.9 145 3735 | ||
| + | 37 20.2 140 3325 | ||
| + | 38 20.9 190 3950 | ||
| + | 84 | ||
| + | 85 18.4 135 2950 | ||
| + | 86 18.2 130 3030 | ||
| + | 87 22.7 138 3785 | ||
| + | |||
| + | > aggregate(x=carros.numeros, | ||
| + | Group.1 | ||
| + | 1 Chevrolet 18.1875 | ||
| + | 2 Ford 14.9625 | ||
| + | 3 Toyota 17.2750 | ||
| + | |||
| + | </ | ||
| + | |||
| + | Os argumentos básicos da função são o objeto com os valores ('' | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Matrizes e " | ||
| + | |||
| + | Matrizes são vetores cujos valores são referenciados por dois índices, o número da linha e o número da coluna. | ||
| + | <code rsplus> | ||
| + | > my.matrix | ||
| + | [,1] [,2] [,3] [,4] | ||
| + | [1,] 1 1 1 1 | ||
| + | [2,] 2 2 2 2 | ||
| + | [3,] 3 3 3 3 | ||
| + | </ | ||
| + | Os índices entre colchetes são a referência do par [linha, | ||
| + | |||
| + | <code rsplus> | ||
| + | > rownames(my.matrix) <- c(" | ||
| + | > colnames(my.matrix) <- c(" | ||
| + | > | ||
| + | > my.matrix | ||
| + | C1 C2 C3 C4 | ||
| + | R1 1 1 1 1 | ||
| + | R2 2 2 2 2 | ||
| + | R3 3 3 3 3 | ||
| + | </ | ||
| + | |||
| + | A função '' | ||
| + | |||
| + | <code rsplus> | ||
| + | > dimnames(my.matrix) | ||
| + | [[1]] | ||
| + | [1] " | ||
| + | |||
| + | [[2]] | ||
| + | [1] " | ||
| + | </ | ||
| + | |||
| + | A função '' | ||
| + | <code rsplus> | ||
| + | > dim(my.matrix) | ||
| + | [1] 3 4 | ||
| + | </ | ||
| + | |||
| + | === Totais Marginais: a função '' | ||
| + | |||
| + | Para aplicar qualquer função a uma das dimensões de uma matriz, use a função '' | ||
| + | |||
| + | <code rsplus> | ||
| + | ##Soma dos valores de cada linha: | ||
| + | > apply(X=my.matrix, | ||
| + | R1 R2 R3 | ||
| + | | ||
| + | > | ||
| + | ##Máximo de cada coluna | ||
| + | > apply(X=my.matrix, | ||
| + | C1 C2 C3 C4 | ||
| + | | ||
| + | </ | ||
| + | |||
| + | Os argumentos básicos da função são a matriz ('' | ||
| + | |||
| + | === Álgebra Matricial === | ||
| + | |||
| + | Todas as operações matriciais podem ser realizadas com as matrizes numéricas. O R possui funções para estas operações, | ||
| + | |||
| + | <code rsplus> | ||
| + | > m | ||
| + | [,1] [,2] [,3] | ||
| + | [1,] 1 1 1 | ||
| + | [2,] 1 1 1 | ||
| + | [3,] 1 1 1 | ||
| + | [4,] 1 1 1 | ||
| + | > n | ||
| + | [1] 1 2 3 | ||
| + | ## | ||
| + | > m*n | ||
| + | [,1] [,2] [,3] | ||
| + | [1,] 1 1 1 | ||
| + | [2,] 2 2 2 | ||
| + | [3,] 3 3 3 | ||
| + | ##Diagonal da matriz resultante | ||
| + | > diag(m*n) | ||
| + | [1] 1 2 3 | ||
| + | > | ||
| + | ## | ||
| + | > m%*%n | ||
| + | [,1] | ||
| + | [1,] 6 | ||
| + | [2,] 6 | ||
| + | [3,] 6 | ||
| + | </ | ||
| + | |||
| + | Consulte a ajuda para detalhes. | ||
| + | |||
| + | === Arrays === | ||
| + | |||
| + | Os //arrays// são a generalização das matrizes para mais de duas dimensões. Um exemplo é o objeto '' | ||
| + | <code rsplus> | ||
| + | > dim(Titanic) | ||
| + | [1] 4 2 2 2 | ||
| + | </ | ||
| + | |||
| + | Com os seguintes nomes: | ||
| + | <code rsplus> | ||
| + | > dimnames(Titanic) | ||
| + | $Class | ||
| + | [1] " | ||
| + | |||
| + | $Sex | ||
| + | [1] " | ||
| + | |||
| + | $Age | ||
| + | [1] " | ||
| + | |||
| + | $Survived | ||
| + | [1] " | ||
| + | </ | ||
| + | |||
| + | |||
| + | Todas as operações aplicáveis a matrizes também o são para //arrays//: | ||
| + | |||
| + | <code rsplus> | ||
| + | > adultos.por.sexo <- apply(Titanic, | ||
| + | ##Mulheres primeiro? | ||
| + | > adultos.por.sexo | ||
| + | Survived | ||
| + | Sex No Yes | ||
| + | Male 1364 367 | ||
| + | Female | ||
| + | |||
| + | ##Como o objeto resultante é uma matriz, pode-se aplicar apply novamente: | ||
| + | > adultos.por.sexo/ | ||
| + | Survived | ||
| + | Sex | ||
| + | Male | ||
| + | Female 0.2680851 0.7319149 | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Exercícios ==== | ||
| + | |||
| + | <box left | // | ||
| + | O pacote " | ||
| + | |||
| + | O conjunto " | ||
| + | |||
| + | - Quais são as classes desses dois objetos? | ||
| + | - Calcule a média de cada uma das quatro medidas por espécie, dos dois objetos. | ||
| + | - Os nomes das variáveis estão em inglês. Mude-os para português no objeto '' | ||
| + | </ | ||
| + | |||
| + | <box left | // | ||
| + | - Crie um objeto com os dados do arquivo-texto [[: | ||
| + | - Verifique o conteúdo do objeto resultante, com a função '' | ||
| + | - Acrescente uma nova coluna ao data frame resultante, com a soma das biomassas de folhas e do tronco de cada árvore. | ||
| + | - Acrescente outra coluna, com o valor da área basal de cada árvore. | ||
| + | </ | ||
| + | |||
| + | <box left 85% | // | ||
| + | |||
| + | |||
| + | - Crie o seguinte objeto da classe matriz: | ||
| + | <code rsplus> | ||
| + | |||
| + | > minha.matriz <- matrix(seq(from=2, | ||
| + | |||
| + | </ | ||
| + | - Mude os nomes das linhas para " | ||
| + | - O que acontece com a matriz após o comando:< | ||
| + | - Como reverter este resultado? | ||
| + | - Se você respondeu ao item anterior, percebeu que os nomes da matriz foram perdidos. Como restituí-los sem ter que refazer o passo 2? **Dica**: o resultado da função '' | ||
| + | </ | ||
| + | |||
| + | |||
| + | <box left 85% | // | ||
| + | - Crie um //data frame// com os dados do arquivo [[: | ||
| + | - A partir desse objeto, crie um novo //data frame// com o número de ordens, famílias, gêneros e espécies de insetos por tribo de planta. | ||
| + | **DICA:** para calcular a riqueza, crie esta função, digitando o comando abaixo: | ||
| + | <code rsplus> riqueza <- function(x) { length(na.omit(unique(x))) } </ | ||
| + | Detalhes sobre construção de funções estão no tópico [[.: | ||
| + | <code rsplus> | ||
| + | > letras <- rep( c(letters[1: | ||
| + | > letras | ||
| + | [1] " | ||
| + | > riqueza(letras) | ||
| + | [1] 3 | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | <box left | // | ||
| + | |||
| + | As matrizes de transição são uma maneira conveniente de modelar o crescimento de uma população dividida em faixas etárias, ou estágios de desenvolvimento. Para uma população de // | ||
| + | |||
| + | <code rsplus> | ||
| + | 0,43 0 0,56 | ||
| + | 0,33 0,61 0 | ||
| + | 0 | ||
| + | </ | ||
| + | |||
| + | Os elementos da matriz são as probabilidades de transição, | ||
| + | |||
| + | - Crie um objeto da classe matriz com esses valores. Isso permite realizar as operações matriciais a seguir. | ||
| + | - Para calcular o número de indivíduos em cada estágio após um intervalo de tempo, basta multiplicar a matriz de transição pelas abundâncias dos indivíduos em cada estágio. Começando com 50 indivíduos do estágio 1, 25 do estágio 2 e 10 no estágio 3, qual será o número de plantas em cada estágio após três intervalos? | ||
| + | - **Opcional**: | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== O R como Ambiente de Operações Vetoriais ===== | ||
| + | |||
| + | Na verdade, o R é muito mais que uma simples calculadora. O R é um **ambiente** onde podemos realizar operações vetoriais e matriciais. | ||
| + | |||
| + | Além das regras básicas para operações com vetores numéricos (ver [[03-funcoes# | ||
| + | |||
| + | ==== Operações com Caracteres ==== | ||
| + | |||
| + | Para vetores do tipo ''' | ||
| + | <code rsplus> | ||
| + | > mean( sp ) | ||
| + | [1] NA | ||
| + | Warning message: | ||
| + | argument ' | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | Mas existem muitas operações que funcionam ou são próprias desse tipo de vetores: | ||
| + | <code rsplus> | ||
| + | > sort( sp ) # ordenação de caracteres em ordem crescente | ||
| + | [1] " | ||
| + | [4] " | ||
| + | > | ||
| + | > grep(" | ||
| + | [1] 1 4 | ||
| + | > | ||
| + | > table( sp ) # contagem do numero de elementos para cada classe de elemento | ||
| + | sp | ||
| + | | ||
| + | | ||
| + | > | ||
| + | > sub(" | ||
| + | [1] "M. sulfiflora" | ||
| + | > | ||
| + | > strsplit(sp, | ||
| + | [[1]] | ||
| + | [1] " | ||
| + | |||
| + | [[2]] | ||
| + | [1] " | ||
| + | |||
| + | [[3]] | ||
| + | [1] " | ||
| + | |||
| + | [[4]] | ||
| + | [1] " | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | Também é possível concatenar vetores de caracteres usando a função '' | ||
| + | |||
| + | <code rsplus> | ||
| + | |||
| + | > bicho <- c(" | ||
| + | > cor <- c(" | ||
| + | > paste(bicho, | ||
| + | [1] "pato branco" | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Operações Lógicas ==== | ||
| + | |||
| + | Algumas operações são válidas para qualquer tipo de vetor. Essas operações envolvem comparações e são chamadas de operações lógicas: | ||
| + | <code rsplus> | ||
| + | > " | ||
| + | [1] FALSE FALSE TRUE FALSE | ||
| + | > | ||
| + | > a <= 7 | ||
| + | [1] TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE | ||
| + | > | ||
| + | > b | ||
| + | [1] 1 2 3 4 5 6 7 8 | ||
| + | > b >= 4 | ||
| + | [1] FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE | ||
| + | > | ||
| + | > c | ||
| + | [1] 20 21 22 23 24 25 26 27 28 29 30 31 32 | ||
| + | > (c %% 2) != 0 | ||
| + | [1] FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE | ||
| + | [13] FALSE | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | Como o R é um **ambiente vetorial** o resultado de operações lógicas também podem ser guardadas em vetores. | ||
| + | <code rsplus> | ||
| + | > b | ||
| + | [1] 1 2 3 4 5 6 7 8 | ||
| + | > f <- b <= 5 | ||
| + | > f | ||
| + | [1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE | ||
| + | > class( f ) | ||
| + | [1] " | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | |||
| + | === Teste lógico para valores faltantes: função '' | ||
| + | |||
| + | O indicador de valor faltante (//" | ||
| + | |||
| + | <code rsplus> | ||
| + | > a <- seq(-100, | ||
| + | > a | ||
| + | [1] -100 -50 0 | ||
| + | > b <- sqrt(a) | ||
| + | Warning message: | ||
| + | NaNs produzidos in: sqrt(a) | ||
| + | > b | ||
| + | [1] | ||
| + | > b==NA | ||
| + | [1] NA NA NA NA NA | ||
| + | > b==" | ||
| + | [1] FALSE FALSE FALSE FALSE FALSE | ||
| + | > is.na(b) | ||
| + | [1] TRUE TRUE FALSE FALSE FALSE | ||
| + | > !is.na(b) | ||
| + | [1] FALSE FALSE TRUE TRUE TRUE | ||
| + | </ | ||
| + | |||
| + | <box 90% center red> | ||
| + | **Operadores Lógicos no R** ((Incluímos aqui a função '' | ||
| + | <code rsplus> | ||
| + | ========================================= | ||
| + | | ||
| + | ========================================= | ||
| + | |||
| + | | ||
| + | | ||
| + | > | ||
| + | < | ||
| + | > | ||
| + | < | ||
| + | & | ||
| + | | ||
| + | | ||
| + | | ||
| + | não numérico | ||
| + | |||
| + | ========================================= | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Sinais de Atribuição e de Igualdade ==== | ||
| + | |||
| + | Já tratamos dos sinais de atribuição no item sobre [[02-entrada# | ||
| + | <code rsplus> | ||
| + | > a = log(2) | ||
| + | > a | ||
| + | [1] 0.6931472 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | Um **detalhe importantíssimo** é diferenciar um **sinal de igualdade** de um **sinal de atribuição**. | ||
| + | |||
| + | O sinal de igualdade faz uma comparação entre dois elementos. | ||
| + | <code rsplus> | ||
| + | > a = 2 + 2 | ||
| + | > a == 4 | ||
| + | [1] TRUE | ||
| + | > a == 2+2 | ||
| + | [1] TRUE | ||
| + | > a == 2 | ||
| + | [1] FALSE | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | === Uma maneira simples de quantificar frequências === | ||
| + | |||
| + | Os vetores lógicos ('' | ||
| + | <code rsplus> | ||
| + | > f | ||
| + | [1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE | ||
| + | > f * 7 | ||
| + | [1] 7 7 7 7 7 0 0 0 | ||
| + | > | ||
| + | > f * (1: | ||
| + | [1] 1 2 3 4 5 0 0 0 | ||
| + | > | ||
| + | </ | ||
| + | Para ter frequência de dados que satisfaçam uma certa condição basta somar o vetor lógico resultante: | ||
| + | <code rsplus> | ||
| + | > notas.dos.alunos | ||
| + | | ||
| + | [16] 8.0 6.7 4.5 | ||
| + | ##Quantos valores iguais ou maiores que cinco? | ||
| + | > sum(notas.dos.alunos> | ||
| + | [1] 14 | ||
| + | ##Qual a proporção deste valor em relação ao total? | ||
| + | > sum(notas.dos.alunos> | ||
| + | [1] 0.7777778 | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Exercícios ==== | ||
| + | |||
| + | <box 100% left | // | ||
| + | |||
| + | Considere o seguinte vetor: | ||
| + | <code rsplus> | ||
| + | > cores = c(" | ||
| + | > | ||
| + | </ | ||
| + | Para gerar uma amostra, com reposição, | ||
| + | <code rsplus> | ||
| + | > muitas.cores = sample(cores, | ||
| + | > muitas.cores | ||
| + | [1] " | ||
| + | [7] " | ||
| + | [13] " | ||
| + | [19] " | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | Como podemos obter uma tabela de freqüência das cores? | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | <box 100% left | // | ||
| + | |||
| + | Para gerar uma amostra de 1000 números de uma distribuição Normal com média 23 e desvio padrão 5, utilize o comando: | ||
| + | <code rsplus> | ||
| + | > vnormal = rnorm(1000, 23, 5) | ||
| + | </ | ||
| + | |||
| + | Quantas observações no vetor ''' | ||
| + | |||
| + | </ | ||
| + | |||
| + | <box 100% left | // | ||
| + | |||
| + | A função ''' | ||
| + | |||
| + | Quantas dessas cores são variantes da cor salmão (// | ||
| + | |||
| + | Quantas são variantes de verde? | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Subconjuntos e Indexação ===== | ||
| + | |||
| + | Frequentemente teremos que trabalhar não com um vetor inteiro, mas com um // | ||
| + | |||
| + | O **operador** de indexação é o colchetes '' | ||
| + | |||
| + | A) **Vetor de números inteiros positivos**: | ||
| + | <code rsplus> | ||
| + | > a | ||
| + | [1] 1.0000000 10.0000000 | ||
| + | [8] 0.4338837 | ||
| + | > a[ 2:4 ] # subconjuntos dos elementos nas posições 2 a 4 | ||
| + | [1] 10.000000 | ||
| + | > b | ||
| + | [1] 1 2 3 4 5 6 7 8 | ||
| + | > b[ c(2,5,8) ] # subconjuntos dos elementos nas posições 2, 5 e 8 | ||
| + | [1] 2 5 8 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | |||
| + | B) **Vetor de números inteiros negativos**: | ||
| + | <code rsplus> | ||
| + | a | ||
| + | [1] 1.0000000 10.0000000 | ||
| + | [8] 0.4338837 | ||
| + | > a[ -(2:4) ] # Exclui as posições de 2 a 4 | ||
| + | [1] 1.0000000 0.7853982 0.3678794 0.8020016 0.4338837 | ||
| + | > b | ||
| + | [1] 1 2 3 4 5 6 7 8 | ||
| + | > b[ -c(2,5,8) ] # Exclui as posições de 2, 5 e 8 | ||
| + | [1] 1 3 4 6 7 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | |||
| + | C) **Vetor lógico**: os elementos do vetor lógico correspondentes a '' | ||
| + | <code rsplus> | ||
| + | > b | ||
| + | [1] 1 2 3 4 5 6 7 8 | ||
| + | > b[ c(TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE) ] | ||
| + | [1] 1 2 6 7 8 | ||
| + | > b[ b< 5 ] | ||
| + | [1] 1 2 3 4 | ||
| + | > b[ b >= 7 ] | ||
| + | [1] 7 8 | ||
| + | > b[ b == max(b) ] | ||
| + | [1] 8 | ||
| + | > b[ b == min(b) ] | ||
| + | [1] 1 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | Na indexação por vetores lógicos, esses vetores devem ter **o mesmo comprimento** do vetor indexado. Caso contrário a operação será defeituosa: | ||
| + | <code rsplus> | ||
| + | > b | ||
| + | [1] 1 2 3 4 5 6 7 8 | ||
| + | > b[ c(TRUE, TRUE) ] | ||
| + | [1] 1 2 3 4 5 6 7 8 | ||
| + | > b[ c(FALSE, FALSE) ] | ||
| + | integer(0) | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | As operações por vetores lógicos podem combinar vários critérios, por meio dos operadores " | ||
| + | |||
| + | <WRAP center round box 60%> | ||
| + | Por questão de segurança do wiki contra spam algumas palavras são proibidas. Nos exemplos a seguir a palavra " | ||
| + | </ | ||
| + | |||
| + | |||
| + | <code rsplus> | ||
| + | ## Primeiras 5 linhas do data frame USArrests (crimes/ | ||
| + | > USArrests[1: | ||
| + | | ||
| + | Alabama | ||
| + | Alaska | ||
| + | Arizona | ||
| + | Arkansas | ||
| + | California | ||
| + | |||
| + | ## | ||
| + | > USArrests$UrbanPop[USArrests$Murder> | ||
| + | [1] 58 60 83 65 66 52 66 44 70 53 75 72 48 59 80 63 39 | ||
| + | |||
| + | ##Mesma condição acima, apenas estados com população menor do 55 milhões | ||
| + | > USArrests$UrbanPop[USArrests$Murder> | ||
| + | [1] 52 44 53 48 39 | ||
| + | </ | ||
| + | |||
| + | D) **Vetor caracter**: nesse caso o vetor deve ser //nomeado// (função '' | ||
| + | <code rsplus> | ||
| + | > zoo = c(4, 10, 2, 45) | ||
| + | > names(zoo) = c(" | ||
| + | > zoo[ c(" | ||
| + | anta guará | ||
| + | | ||
| + | > zoo[ grep(" | ||
| + | onça | ||
| + | 4 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Indexação de Fatores ==== | ||
| + | A indexação de um fator pode resultar em níveis não usados. Caso você queira excluir esses níveis, use o argumento '' | ||
| + | <code rsplus> | ||
| + | > tratamentos | ||
| + | [1] Controle Controle Controle Controle Adubo A Adubo A Adubo A Adubo A | ||
| + | [9] Adubo B Adubo B Adubo B Adubo B | ||
| + | Levels: Controle Adubo A Adubo B | ||
| + | > resposta | ||
| + | [1] 1.8 3.0 0.9 1.7 2.4 2.7 2.6 1.5 3.0 2.7 0.8 3.0 | ||
| + | > resp.sem.controle <- resposta[tratamentos!=" | ||
| + | > trat.sem.controle <- tratamentos[tratamentos!=" | ||
| + | > tapply(resp.sem.controle, | ||
| + | Controle | ||
| + | NA 2.300 2.375 | ||
| + | > | ||
| + | > ## Para eliminar níveis vazios do fator: | ||
| + | > trat.sem.controle <- tratamentos[tratamentos!=" | ||
| + | > tapply(resp.sem.controle, | ||
| + | Adubo A Adubo B | ||
| + | 2.300 2.375 | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ==== Indexação de Matrizes e Data Frames ==== | ||
| + | |||
| + | O modo de indexação de matrizes é '' | ||
| + | |||
| + | <code rsplus> | ||
| + | > matriz | ||
| + | [,1] [,2] [,3] [,4] | ||
| + | [1,] 1 4 7 10 | ||
| + | [2,] 2 5 8 11 | ||
| + | [3,] 3 6 9 12 | ||
| + | > matriz[1,1] | ||
| + | [1] 1 | ||
| + | > matriz[1: | ||
| + | [1] 1 2 | ||
| + | > matriz[1: | ||
| + | [,1] [,2] | ||
| + | [1,] 1 4 | ||
| + | [2,] 2 5 | ||
| + | </ | ||
| + | |||
| + | A mesma notação é válida para //data frames//: | ||
| + | |||
| + | <code rsplus> | ||
| + | > USArrests[1: | ||
| + | | ||
| + | Alabama | ||
| + | Alaska | ||
| + | Arizona | ||
| + | Arkansas | ||
| + | California | ||
| + | > | ||
| + | > USArrests[1: | ||
| + | | ||
| + | Alabama | ||
| + | Alaska | ||
| + | Arizona | ||
| + | Arkansas | ||
| + | California | ||
| + | > | ||
| + | > USArrests[USArrests$UrbanPop> | ||
| + | Assault Abuso | ||
| + | California | ||
| + | Hawaii | ||
| + | Illinois | ||
| + | Massachusetts | ||
| + | Nevada | ||
| + | New Jersey | ||
| + | </ | ||
| + | |||
| + | Para incluir todas as linhas ou colunas, omita o valor (mas mantenha a vírgula!): | ||
| + | |||
| + | <code rsplus> | ||
| + | > matriz[,1] | ||
| + | [1] 1 2 3 | ||
| + | > matriz[, | ||
| + | [,1] [,2] | ||
| + | [1,] 1 10 | ||
| + | [2,] 2 11 | ||
| + | [3,] 3 12 | ||
| + | > | ||
| + | > USArrests[1: | ||
| + | | ||
| + | Alabama | ||
| + | Alaska | ||
| + | Arizona | ||
| + | Arkansas | ||
| + | California | ||
| + | > | ||
| + | > USArrests[grep(" | ||
| + | | ||
| + | California | ||
| + | Colorado | ||
| + | Connecticut | ||
| + | North Carolina | ||
| + | South Carolina | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | A notação é estendida para um //array// de qualquer dimensão, como o objeto '' | ||
| + | |||
| + | <code rsplus> | ||
| + | > dimnames(Titanic) | ||
| + | $Class | ||
| + | [1] " | ||
| + | |||
| + | $Sex | ||
| + | [1] " | ||
| + | |||
| + | $Age | ||
| + | [1] " | ||
| + | |||
| + | $Survived | ||
| + | [1] " | ||
| + | |||
| + | ## Adultos sobreviventes | ||
| + | > Titanic[,, | ||
| + | Sex | ||
| + | Class Male Female | ||
| + | 1st 57 140 | ||
| + | 2nd 14 80 | ||
| + | 3rd 75 76 | ||
| + | Crew 192 20 | ||
| + | |||
| + | ## O mesmo, usando os nomes | ||
| + | > Titanic[,," | ||
| + | Sex | ||
| + | Class Male Female | ||
| + | 1st 57 140 | ||
| + | 2nd 14 80 | ||
| + | 3rd 75 76 | ||
| + | Crew 192 20 | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Usando Indexação para Alterar Valores ==== | ||
| + | |||
| + | Combinando as operações de indexação e de atribuição é possível alterar os valores de qualquer parte de um objeto: | ||
| + | |||
| + | <code rsplus> | ||
| + | > zoo | ||
| + | | ||
| + | 4 10 | ||
| + | > names(zoo)[4] <- " | ||
| + | > zoo | ||
| + | onça | ||
| + | | ||
| + | > | ||
| + | > matriz | ||
| + | [,1] [,2] [,3] [,4] | ||
| + | [1,] 1 4 7 10 | ||
| + | [2,] 2 5 8 11 | ||
| + | [3,] 3 6 9 12 | ||
| + | > matriz[, | ||
| + | > matriz | ||
| + | [,1] [,2] [,3] [,4] | ||
| + | [1,] | ||
| + | [2,] | ||
| + | [3,] | ||
| + | > matriz[is.na(matriz)==T] <- 0 | ||
| + | > matriz | ||
| + | [,1] [,2] [,3] [,4] | ||
| + | [1,] 0 4 7 0 | ||
| + | [2,] 0 5 8 0 | ||
| + | [3,] 0 6 9 0 | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Ordenação por Indexação: | ||
| + | |||
| + | Com a indexação é possível mudar a ordem de um vetor: | ||
| + | |||
| + | <code rsplus> | ||
| + | > zoo | ||
| + | onça | ||
| + | | ||
| + | >## | ||
| + | > zoo[4:1] | ||
| + | lobo-guará | ||
| + | 45 2 | ||
| + | ##Uma ordem arbitrária | ||
| + | > zoo[c(3, | ||
| + | tatu lobo-guará | ||
| + | | ||
| + | </ | ||
| + | |||
| + | A função '' | ||
| + | |||
| + | <code rsplus> | ||
| + | ##Vetor de nomes do vetor zoo: | ||
| + | > names(zoo) | ||
| + | [1] " | ||
| + | |||
| + | ## O nome " | ||
| + | > order(names(zoo)) | ||
| + | [1] 2 4 1 3 | ||
| + | </ | ||
| + | |||
| + | E com isso podemos usar seu resultado para ordenar um vetor em função de quaisquer outros: | ||
| + | <code rsplus> | ||
| + | > zoo[order(names(zoo))] | ||
| + | anta lobo-guará | ||
| + | 10 | ||
| + | </ | ||
| + | |||
| + | O argumento da função comporta múltiplos vetores de critério. Em caso de empate pelo(s) primeiro(s) critério(s), | ||
| + | |||
| + | <code rsplus> | ||
| + | > cidades | ||
| + | | ||
| + | Feira de Santana | ||
| + | Salvador | ||
| + | São Paulo SE SP 11104712 | ||
| + | Niterói | ||
| + | Nova Iguaçu | ||
| + | Recife | ||
| + | Santo André | ||
| + | Rio de Janeiro | ||
| + | Sorocaba | ||
| + | Campinas | ||
| + | Osasco | ||
| + | Guarulhos | ||
| + | Jaboatão | ||
| + | > | ||
| + | > cidades[order(cidades$regiao, | ||
| + | | ||
| + | São Paulo SE SP 11104712 | ||
| + | Guarulhos | ||
| + | Campinas | ||
| + | Osasco | ||
| + | Santo André | ||
| + | Sorocaba | ||
| + | Rio de Janeiro | ||
| + | Nova Iguaçu | ||
| + | Niterói | ||
| + | Recife | ||
| + | Jaboatão | ||
| + | Salvador | ||
| + | Feira de Santana | ||
| + | |||
| + | </ | ||
| + | |||
| + | <box 50% center red |**Prefira Ordenar por Indexação**> | ||
| + | |||
| + | A função '' | ||
| + | |||
| + | A função '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Exercícios ==== | ||
| + | |||
| + | <box 100% left | // | ||
| + | Verifique o resultado do comando: | ||
| + | <code rsplus> | ||
| + | > ?" | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <box 100% left | // | ||
| + | Crie uma lista com o comando: | ||
| + | <code rsplus> | ||
| + | minha.lista <- list(um.vetor=1: | ||
| + | um.dframe=data.frame(seculo=c(" | ||
| + | inicio=c(1801, | ||
| + | </ | ||
| + | Qual a diferença entre os subconjuntos obtidos com os três comandos a seguir: | ||
| + | <code rsplus> | ||
| + | minha.lista[1] | ||
| + | minha.lista[[1]] | ||
| + | minha.lista$um.vetor | ||
| + | </ | ||
| + | </ | ||
| + | <box 100% left | // | ||
| + | |||
| + | Para gerar uma amostra de 10.000 números de uma distribuição Normal com média 30 e desvio padrão 7, utilize o comando: | ||
| + | <code rsplus> | ||
| + | > vnormal = rnorm(10000, | ||
| + | </ | ||
| + | |||
| + | Qual o somatório das observações no vetor ''' | ||
| + | |||
| + | Como você excluiria a //maior// observação do vetor ''' | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | <box 100% left | // | ||
| + | |||
| + | Das cores que o R pode gerar, quais são as cores variantes de salmão? | ||
| + | |||
| + | Quais são as variantes de rosa? | ||
| + | |||
| + | </ | ||
| + | |||
| + | <box left | // | ||
| + | - Ops! Há um erro no arquivo criado no exercício 4.3, no nome do // | ||
| + | - Os valores de massa cerebral das três espécies de dinossauros agora estão disponíveis, | ||
| + | |||
| + | ^ | | ||
| + | ^// | ||
| + | ^// | ||
| + | ^// | ||
| + | |||
| + | </ | ||
| + | |||
| + | <box 100% left | **Exercício 4.18.** Aninhamento de comunidades> | ||
| + | |||
| + | O termo " | ||
| + | - Crie um objeto da classe matriz com [[: | ||
| + | - Use o ordenamento por indexação para criar uma matriz com as comunidades por ordem decrescente de espécies, e as espécies por ordem decrescente de frequência de ocorrência. (OUTRA DICA: lembre-se da função '' | ||
| + | - A matriz resultante tem sinais de aninhamento? | ||
| + | |||
| + | </ | ||