Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior Próxima revisão Ambos lados da revisão seguinte | ||
03_apostila:04-dados [2020/08/20 16:10] adalardo |
03_apostila:04-dados [2023/08/14 19:13] 127.0.0.1 edição externa |
||
---|---|---|---|
Linha 71: | Linha 71: | ||
[4,] "fogo" "terra" "água" "ar" | [4,] "fogo" "terra" "água" "ar" | ||
</code> | </code> | ||
+ | |||
=== Função ''data.frame()'' === | === Função ''data.frame()'' === | ||
Com a função ''data.frame'' reunimos vetores de mesmo comprimento em um só objeto: | Com a função ''data.frame'' reunimos vetores de mesmo comprimento em um só objeto: | ||
Linha 89: | Linha 90: | ||
</code> | </code> | ||
- | === Funçao ''edit()''=== | + | === Função ''edit()''=== |
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 ''edit'' a um objeto: | 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 ''edit'' a um objeto: | ||
<code rsplus> | <code rsplus> | ||
Linha 212: | Linha 213: | ||
No segundo caso, o pacote //vegan//, que tem o conjunto de dados, não está carregado e por isso deve ser indicado no argumento ''package''. | No segundo caso, o pacote //vegan//, que tem o conjunto de dados, não está carregado e por isso deve ser indicado no argumento ''package''. | ||
- | === Importacao de Pacotes Estatísticos === | + | === Importação de Pacotes Estatísticos === |
O pacote //foreign// contém funções para importar e exportar diretamente arquivos de pacotes estatísticos. | O pacote //foreign// contém funções para importar e exportar diretamente arquivos de pacotes estatísticos. | ||
Linha 249: | Linha 250: | ||
* Atenas a Estocolmo: 3927 | * Atenas a Estocolmo: 3927 | ||
* Madri a Paris: 1273 | * Madri a Paris: 1273 | ||
- | * Madri a Estocolomo: 3188 | + | * Madri a Estocolmo: 3188 |
* Paris a Estocolmo: 1827 | * Paris a Estocolmo: 1827 | ||
Linha 295: | Linha 296: | ||
==== Atributos de um Objeto de Dados ==== | ==== Atributos de um Objeto de Dados ==== | ||
- | Todo objeto no R tem dois atributos básicos, que são o tipo de dado que contém((em termos técnicos, trata-se do modo de armazenamento, e.g., apenas números, apenas caracteres, ou uma mistura, que é uma lista)) e o número de elementos que contêm. As funções ''mode'' e ''length'' retornam esses atributos: | + | 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, e.g., apenas números, apenas caracteres, ou uma mistura, que é uma lista)) e o número de elementos que contêm. As funções ''mode'' e ''length'' retornam esses atributos: |
<code rsplus> | <code rsplus> | ||
> pares | > pares | ||
Linha 389: | Linha 390: | ||
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)). | 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 seu níveis ou categorias (''levels'') , que seguem ordem alfanumérica crescente, por //default//. Como essa ordem é importante para muitas análises, pode-se alterá-la com o argumento ''levels'', por exemplo para colocar o controle antes dos tratamentos: | + | Note que fatores têm um atributo que especifica seus níveis ou categorias (''levels'') , que seguem ordem alfanumérica crescente, por //default//. Como essa ordem é importante para muitas análises, pode-se alterá-la com o argumento ''levels'', por exemplo para colocar o controle antes dos tratamentos: |
<code rsplus> | <code rsplus> | ||
> tratamentos <- factor(rep(c("Controle","Adubo A","Adubo B"),each=4)) | > tratamentos <- factor(rep(c("Controle","Adubo A","Adubo B"),each=4)) | ||
Linha 627: | Linha 628: | ||
A função ''aggregate'' gera subconjuntos de cada um dos vetores de um //data frame//, executa uma função para cada um desses subconjuntos, e retorna um novo //data frame// com os resultados. | A função ''aggregate'' gera subconjuntos de cada um dos vetores de um //data frame//, executa uma função para cada um desses subconjuntos, e retorna um novo //data frame// com os resultados. | ||
- | Como seu resultado é sempre um //data frame//, a função ''aggregate'' é mais adequada que ''tapply'' para fazer estatíticas de muitos casos por uma ou muitas combinações de critérios: | + | Como seu resultado é sempre um //data frame//, a função ''aggregate'' é mais adequada que ''tapply'' para fazer estatísticas de muitos casos por uma ou muitas combinações de critérios: |
<code rsplus> | <code rsplus> | ||
> carros.marcas | > carros.marcas | ||
Linha 827: | Linha 828: | ||
- Quais são as classes desses dois objetos? | - Quais são as classes desses dois objetos? | ||
- Calcule a média de cada uma das quatro medidas por espécie, dos dois objetos. | - Calcule a média de cada uma das quatro medidas por espécie, dos dois objetos. | ||
- | - Os nomes das variaveis estão em inglês. Mude-os para português no objeto ''iris''. (//DICA: Como tudo mais no R, os resultados da função ''names'' podem ser armazenados em um objeto//) | + | - Os nomes das variáveis estão em inglês. Mude-os para português no objeto ''iris''. (//DICA: Como tudo mais no R, os resultados da função ''names'' podem ser armazenados em um objeto//) |
</box> | </box> | ||
Linha 879: | Linha 880: | ||
</code> | </code> | ||
- | Os elementos da matriz são a probabilidades de transição, num intervalo de tempo, do estágio correspondente ao número da coluna para o estágio correspondente ao número da linha. Por exemplo, a chance de um indivíduo passar do estágio 1 para o 2 é 0,33, e de permanecer em 1 é de 0,43. | + | Os elementos da matriz são as probabilidades de transição, num intervalo de tempo, do estágio correspondente ao número da coluna para o estágio correspondente ao número da linha. Por exemplo, a chance de um indivíduo passar do estágio 1 para o 2 é 0,33, e de permanecer em 1 é de 0,43. |
- Crie um objeto da classe matriz com esses valores. Isso permite realizar as operações matriciais a seguir. | - Crie um objeto da classe matriz com esses valores. Isso permite realizar as operações matriciais a seguir. | ||
Linha 1032: | Linha 1033: | ||
O sinal de igualdade faz uma comparação entre dois elementos. No R o sinal de igualdade são dois sinais de igual seguidos (**==**). Este operador retorna o resultado do teste lógico //"a igual b?"//, que só pode ter dois valores, ''T'' (verdadeiro), ou ''F'' (falso): | O sinal de igualdade faz uma comparação entre dois elementos. No R o sinal de igualdade são dois sinais de igual seguidos (**==**). Este operador retorna o resultado do teste lógico //"a igual b?"//, que só pode ter dois valores, ''T'' (verdadeiro), ou ''F'' (falso): | ||
- | <code> | + | <code rsplus> |
> a = 2 + 2 | > a = 2 + 2 | ||
> a == 4 | > a == 4 | ||
Linha 1048: | Linha 1049: | ||
Os vetores lógicos ('''logical''') podem participar de operações matemáticas. Nesse caso o valor '''TRUE''' assume o valor 1, e valor '''FALSE''' assume o valor 0: | Os vetores lógicos ('''logical''') podem participar de operações matemáticas. Nesse caso o valor '''TRUE''' assume o valor 1, e valor '''FALSE''' assume o valor 0: | ||
- | <code> | + | <code rsplus> |
> f | > f | ||
[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE | [1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE | ||
Linha 1059: | Linha 1060: | ||
</code> | </code> | ||
Para ter frequência de dados que satisfaçam uma certa condição basta somar o vetor lógico resultante: | Para ter frequência de dados que satisfaçam uma certa condição basta somar o vetor lógico resultante: | ||
- | <code> | + | <code rsplus> |
> notas.dos.alunos | > notas.dos.alunos | ||
[1] 6.0 5.1 6.8 2.8 6.1 9.0 4.3 10.4 6.0 7.9 8.9 6.8 9.8 4.6 11.3 | [1] 6.0 5.1 6.8 2.8 6.1 9.0 4.3 10.4 6.0 7.9 8.9 6.8 9.8 4.6 11.3 | ||
Linha 1066: | Linha 1067: | ||
> sum(notas.dos.alunos>=5) | > sum(notas.dos.alunos>=5) | ||
[1] 14 | [1] 14 | ||
- | ##Qual a proporção deste valores em relação ao total? | + | ##Qual a proporção deste valor em relação ao total? |
> sum(notas.dos.alunos>=5)/length(notas.dos.alunos) | > sum(notas.dos.alunos>=5)/length(notas.dos.alunos) | ||
[1] 0.7777778 | [1] 0.7777778 | ||
Linha 1077: | Linha 1078: | ||
Considere o seguinte vetor: | Considere o seguinte vetor: | ||
- | <code> | + | <code rsplus> |
> cores = c("amarelo","vermelho","azul","laranja") | > cores = c("amarelo","vermelho","azul","laranja") | ||
> | > | ||
</code> | </code> | ||
Para gerar uma amostra, com reposição, dessas cores execute o comando: | Para gerar uma amostra, com reposição, dessas cores execute o comando: | ||
- | <code> | + | <code rsplus> |
> muitas.cores = sample(cores, 20, TRUE) | > muitas.cores = sample(cores, 20, TRUE) | ||
> muitas.cores | > muitas.cores | ||
Linha 1100: | Linha 1101: | ||
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: | 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> | + | <code rsplus> |
> vnormal = rnorm(1000, 23, 5) | > vnormal = rnorm(1000, 23, 5) | ||
</code> | </code> | ||
Linha 1127: | Linha 1128: | ||
===== Subconjuntos e Indexação ===== | ===== Subconjuntos e Indexação ===== | ||
- | Freqüentemente teremos que trabalhar não com um vetor inteiro, mas com um //subconjunto// dele. Para obter subconjuntos de um vetor temos que realizar operações de **indexação**, isto é, associar ao vetor um outro vetor de mesmo tamanho com os **índices** do elementos selecionados. | + | Frequentemente teremos que trabalhar não com um vetor inteiro, mas com um //subconjunto// dele. Para obter subconjuntos de um vetor temos que realizar operações de **indexação**, isto é, associar ao vetor um outro vetor de mesmo tamanho com os **índices** dos elementos selecionados. |
O **operador** de indexação é o colchetes '''[]''', e um vetor pode ser indexado de três formas principais: | O **operador** de indexação é o colchetes '''[]''', e um vetor pode ser indexado de três formas principais: | ||
A) **Vetor de números inteiros positivos**: os números se referem às posições desejadas do vetor indexado. | A) **Vetor de números inteiros positivos**: os números se referem às posições desejadas do vetor indexado. | ||
- | <code> | + | <code rsplus> |
> a | > a | ||
[1] 1.0000000 10.0000000 3.4000000 3.1415927 0.7853982 0.3678794 0.8020016 | [1] 1.0000000 10.0000000 3.4000000 3.1415927 0.7853982 0.3678794 0.8020016 | ||
Linha 1146: | Linha 1147: | ||
- | B) **Vetor de números inteiros negativos**: os números se referem as posições **não** desejadas do vetor indexado. | + | B) **Vetor de números inteiros negativos**: os números se referem às posições **não** desejadas do vetor indexado. |
- | <code> | + | <code rsplus> |
a | a | ||
[1] 1.0000000 10.0000000 3.4000000 3.1415927 0.7853982 0.3678794 0.8020016 | [1] 1.0000000 10.0000000 3.4000000 3.1415927 0.7853982 0.3678794 0.8020016 | ||
Linha 1162: | Linha 1163: | ||
C) **Vetor lógico**: os elementos do vetor lógico correspondentes a '''TRUE''' são selecionados, os elementos correspondentes a '''FALSE''' são excluídos. | C) **Vetor lógico**: os elementos do vetor lógico correspondentes a '''TRUE''' são selecionados, os elementos correspondentes a '''FALSE''' são excluídos. | ||
- | <code> | + | <code rsplus> |
> b | > b | ||
[1] 1 2 3 4 5 6 7 8 | [1] 1 2 3 4 5 6 7 8 | ||
Linha 1179: | Linha 1180: | ||
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: | 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> | + | <code rsplus> |
> b | > b | ||
[1] 1 2 3 4 5 6 7 8 | [1] 1 2 3 4 5 6 7 8 | ||
Linha 1190: | Linha 1191: | ||
As operações por vetores lógicos podem combinar vários critérios, por meio dos operadores "E", "OU" e "NÃO": | As operações por vetores lógicos podem combinar vários critérios, por meio dos operadores "E", "OU" e "NÃO": | ||
- | <code> | + | <code rsplus> |
<WRAP center round box 60%> | <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 "estupro" em inglês foi substituida por "Abuso", por esse motivo para rodar as linhas de código deve retornar a palavra para o idioma inglesa. | Por questão de segurança do wiki contra spam algumas palavras são proibidas. Nos exemplos a seguir a palavra "estupro" em inglês foi substituida por "Abuso", por esse motivo para rodar as linhas de código deve retornar a palavra para o idioma inglesa. | ||
Linha 1215: | Linha 1216: | ||
D) **Vetor caracter**: nesse caso o vetor deve ser //nomeado// (função '''names''') por um vetor '''character''': | D) **Vetor caracter**: nesse caso o vetor deve ser //nomeado// (função '''names''') por um vetor '''character''': | ||
- | <code> | + | <code rsplus> |
> zoo = c(4, 10, 2, 45) | > zoo = c(4, 10, 2, 45) | ||
> names(zoo) = c("onça", "anta", "tatu", "guará") | > names(zoo) = c("onça", "anta", "tatu", "guará") | ||
Linha 1229: | Linha 1230: | ||
==== Indexação de Fatores ==== | ==== Indexação de Fatores ==== | ||
- | A indexação de um fator pode resultar em níveis não usados. Caso você queira exluir esses níveis, use o argumento ''drop'', do operador ''[]'': | + | A indexação de um fator pode resultar em níveis não usados. Caso você queira excluir esses níveis, use o argumento ''drop'', do operador ''[]'': |
- | <code> | + | <code rsplus> |
> tratamentos | > tratamentos | ||
[1] Controle Controle Controle Controle Adubo A Adubo A Adubo A Adubo A | [1] Controle Controle Controle Controle Adubo A Adubo A Adubo A Adubo A | ||
Linha 1257: | Linha 1258: | ||
O modo de indexação de matrizes é ''[linhas,colunas]'': | O modo de indexação de matrizes é ''[linhas,colunas]'': | ||
- | <code> | + | <code rsplus> |
> matriz | > matriz | ||
[,1] [,2] [,3] [,4] | [,1] [,2] [,3] [,4] | ||
Linha 1275: | Linha 1276: | ||
A mesma notação é válida para //data frames//: | A mesma notação é válida para //data frames//: | ||
- | <code> | + | <code rsplus> |
> USArrests[1:5,c(2,4)] | > USArrests[1:5,c(2,4)] | ||
Assault abuso | Assault abuso | ||
Linha 1304: | Linha 1305: | ||
Para incluir todas as linhas ou colunas, omita o valor (mas mantenha a vírgula!): | Para incluir todas as linhas ou colunas, omita o valor (mas mantenha a vírgula!): | ||
- | <code> | + | <code rsplus> |
> matriz[,1] | > matriz[,1] | ||
[1] 1 2 3 | [1] 1 2 3 | ||
Linha 1333: | Linha 1334: | ||
A notação é estendida para um //array// de qualquer dimensão, como o objeto ''Titanic'', que tem quatro dimensões: | A notação é estendida para um //array// de qualquer dimensão, como o objeto ''Titanic'', que tem quatro dimensões: | ||
- | <code> | + | <code rsplus> |
> dimnames(Titanic) | > dimnames(Titanic) | ||
$Class | $Class | ||
Linha 1374: | Linha 1375: | ||
Combinando as operações de indexação e de atribuição é possível alterar os valores de qualquer parte de um objeto: | Combinando as operações de indexação e de atribuição é possível alterar os valores de qualquer parte de um objeto: | ||
- | <code> | + | <code rsplus> |
> zoo | > zoo | ||
onça anta tatu guará | onça anta tatu guará | ||
Linha 1411: | Linha 1412: | ||
Com a indexação é possível mudar a ordem de um vetor: | Com a indexação é possível mudar a ordem de um vetor: | ||
- | <code> | + | <code rsplus> |
> zoo | > zoo | ||
onça anta tatu lobo-guará | onça anta tatu lobo-guará | ||
Linha 1427: | Linha 1428: | ||
A função ''order'' retorna os **índices** dos elementos de um vetor: | A função ''order'' retorna os **índices** dos elementos de um vetor: | ||
- | <code> | + | <code rsplus> |
##Vetor de nomes do vetor zoo: | ##Vetor de nomes do vetor zoo: | ||
> names(zoo) | > names(zoo) | ||
Linha 1438: | Linha 1439: | ||
E com isso podemos usar seu resultado para ordenar um vetor em função de quaisquer outros: | E com isso podemos usar seu resultado para ordenar um vetor em função de quaisquer outros: | ||
- | <code> | + | <code rsplus> |
> zoo[order(names(zoo))] | > zoo[order(names(zoo))] | ||
anta lobo-guará onça tatu | anta lobo-guará onça tatu | ||
Linha 1446: | Linha 1447: | ||
O argumento da função comporta múltiplos vetores de critério. Em caso de empate pelo(s) primeiro(s) critério(s), os seguintes são usados: | O argumento da função comporta múltiplos vetores de critério. Em caso de empate pelo(s) primeiro(s) critério(s), os seguintes são usados: | ||
- | <code> | + | <code rsplus> |
> cidades | > cidades | ||
regiao estado pop.2007 | regiao estado pop.2007 | ||
Linha 1498: | Linha 1499: | ||
<box 100% left | //**Exercício 4.13.** Comando Curto, Resultado nem Tanto//> | <box 100% left | //**Exercício 4.13.** Comando Curto, Resultado nem Tanto//> | ||
Verifique o resultado do comando: | Verifique o resultado do comando: | ||
- | <code> | + | <code rsplus> |
> ?"[" | > ?"[" | ||
</code> | </code> | ||
Linha 1505: | Linha 1506: | ||
<box 100% left | //**Exercício 4.14** Indexação de Listas//> | <box 100% left | //**Exercício 4.14** Indexação de Listas//> | ||
Crie uma lista com o comando: | Crie uma lista com o comando: | ||
- | <code> | + | <code rsplus> |
minha.lista <- list(um.vetor=1:5, uma.matriz=matrix(1:6,2,3), | minha.lista <- list(um.vetor=1:5, uma.matriz=matrix(1:6,2,3), | ||
um.dframe=data.frame(seculo=c("XIX","XX","XXI"), | um.dframe=data.frame(seculo=c("XIX","XX","XXI"), | ||
Linha 1511: | Linha 1512: | ||
</code> | </code> | ||
Qual a diferença entre os subconjuntos obtidos com os três comandos a seguir: | Qual a diferença entre os subconjuntos obtidos com os três comandos a seguir: | ||
- | <code> | + | <code rsplus> |
minha.lista[1] | minha.lista[1] | ||
minha.lista[[1]] | minha.lista[[1]] | ||
Linha 1520: | Linha 1521: | ||
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: | 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> | + | <code rsplus> |
> vnormal = rnorm(10000, 30, 7) | > vnormal = rnorm(10000, 30, 7) | ||
</code> | </code> |