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 | ||
02_tutoriais:tutorial3:start [2022/05/31 12:41] adalardo [Um Exemplo] |
02_tutoriais:tutorial3:start [2023/08/23 12:24] (atual) |
||
---|---|---|---|
Linha 42: | Linha 42: | ||
</code> | </code> | ||
- | Agora vamos extrair apena o quinto elemento e em seguida substituir esse elemento pela palavra "quinto_elemento". Em seguida vamos repetir as operações anteriores: | + | Agora vamos extrair apenas o quinto elemento e em seguida substituir esse elemento pela palavra "quinto_elemento". Em seguida vamos repetir as operações anteriores: |
<code rsplus| Quinto elemento> | <code rsplus| Quinto elemento> | ||
Linha 58: | Linha 58: | ||
</code> | </code> | ||
- | O que aconteceu aqui? Por que não conseguimos mais operar o vetor "num"? Vamos agora voltar o vetor para sua forma original e operar novamente: | + | O que aconteceu aqui? Por que não conseguimos mais operar o vetor ''num''? Vamos agora voltar o vetor para sua forma original e operar novamente: |
<code rsplus| Retorno do elemento> | <code rsplus| Retorno do elemento> | ||
Linha 76: | Linha 76: | ||
</code> | </code> | ||
- | Como já havíamos visto, uma das característica do vetor é que **só armazena um tipo de natureza de dados** e o R faz a coerção da classe do objeto dependendo da característica desses dados. Incluir algo que não é digito ou símbolo de decimal em um objeto da classe numérica faz com que a classe seja convertida automaticamente em ''character''. | + | Como já havíamos visto, uma das característica do vetor é que **só armazena um tipo de natureza de dados** e o R faz a coerção da classe do objeto dependendo da característica desses dados. Incluir algo que não é dígito ou símbolo de decimal em um objeto da classe numérica faz com que a classe seja convertida automaticamente em ''character''. |
<WRAP center round tip 60%> | <WRAP center round tip 60%> | ||
Linha 86: | Linha 86: | ||
===== Leitura de Dados ===== | ===== Leitura de Dados ===== | ||
- | A principal função para a leitura de dados no R é ''read.table''. Ela é bem flexível e se aplica para a leitura de dados tabulares como uma planilha eletrônica usual, tendo colunas como variáveis e as linhas como observações. Esta estrutura é análoga a um conjunto de vetores lado a lado, de mesmo comprimento, como veremos a seguir. Antes da leitura de dados é importante garantir que temos eles bem organizados em uma planilha. O artigo [[https://doi.org/10.1080/00031305.2017.1375989|Data Organization in Spreedsheets (Broman & Woo, 2018)]] faz uma ótima síntese de boas práticas para estruturar dados brutos em uma planilha, sua leitura é rápida e irá poupar muito tempo futuro e evitar muitos erros comuns que usuários de planilhas cometem. Os exemplos de [[https://datacarpentry.org/spreadsheet-ecology-lesson/02-common-mistakes/|erros comuns em planilhas de ecologia do datacarpentry]] são também muito bons, uma forma interessante de aprender é ser exposto ao que não devemos fazer. | + | A principal função para a leitura de dados no R é ''read.table''. Ela é bem flexível e se aplica para a leitura de dados tabulares como uma planilha eletrônica usual, tendo colunas como variáveis e as linhas como observações. Esta estrutura é análoga a um conjunto de vetores lado a lado, de mesmo comprimento, como veremos a seguir. Antes da leitura de dados é importante garantir que temos eles bem organizados em uma planilha. O artigo [[https://doi.org/10.1080/00031305.2017.1375989|Data Organization in Spreedsheets (Broman & Woo, 2018)]] faz uma ótima síntese de boas práticas para estruturar dados brutos em uma planilha, sua leitura é rápida e irá poupar muito tempo futuro e evitar muitos erros comuns que usuários de planilhas cometem. Os exemplos de [[https://datacarpentry.org/spreadsheet-ecology-lesson/02-common-mistakes.html|erros comuns em planilhas de ecologia do datacarpentry]] são também muito bons, uma forma interessante de aprender é ser exposto ao que não devemos fazer. |
- | Tendo a planilha eletrônica com os dados brutos bem estruturados, precisamos exportá-la como arquivo texto puro para fazer a leitura no R. Os arquivos de texto são uma forma eficiente de armazenar dados que tem uma estrutura simples de linhas e colunas. Além de poderem ser abertos em qualquer programa simples de texto e sistema operacional, são reconhecidos nas planilhas eletrônicas como estrutura de dados. Normalmente, utilisamos as extensões ''.txt'' ou ''.csv'' para designar arquivos texto com campos de dados separados por tabulação e vírgula, respectivamente((existem muitos outros tipos de formatos de armazenamento de dados que incorporam dados mais complexos e georreferenciados)). | + | Tendo a planilha eletrônica com os dados brutos bem estruturados, precisamos exportá-la como arquivo texto puro para fazer a leitura no R. Os arquivos de texto são uma forma eficiente de armazenar dados que tem uma estrutura simples de linhas e colunas. Além de poderem ser abertos em qualquer programa simples de texto e sistema operacional, são reconhecidos nas planilhas eletrônicas como estrutura de dados. Normalmente, utilizamos as extensões ''.txt'' ou ''.csv'' para designar arquivos texto com campos de dados separados por tabulação e vírgula, respectivamente((existem muitos outros tipos de formatos de armazenamento de dados que incorporam dados mais complexos e georreferenciados)). |
- | Ao exportar os dados deve ficar atento para algumas opções de exportação da planilha, as principais são os caracteres para designar a separação de campo e o símbolo de decimal. Evite, sempre que possível, caracteres especiais como acentos e aspas ('' ' '', ''`'', ''"''), se houver a opção de escolher a codificação de caracteres ("enconding") opte pelo [[https://pt.wikipedia.org/wiki/UTF-8|UTF-8]]. | + | Ao exportar os dados deve ficar atento para algumas opções de exportação da planilha, as principais são os caracteres para designar a separação de campo e o símbolo de decimal. Evite, sempre que possível, caracteres especiais como acentos e aspas ('' ' '', ''`'', ''"''), se houver a opção de escolher a codificação de caracteres ("enconding") opte pelo [[https://pt.wikipedia.org/wiki/UTF-8|UTF-8]]. |
Sabendo o formato que os dados foram salvos no arquivo texto, na maioria dos casos, precisamos apenas do seguintes argumentos para fazer a leitura dos dados no R ((''read.table'' é muito flexível, veja a documentação!)): | Sabendo o formato que os dados foram salvos no arquivo texto, na maioria dos casos, precisamos apenas do seguintes argumentos para fazer a leitura dos dados no R ((''read.table'' é muito flexível, veja a documentação!)): | ||
Linha 100: | Linha 100: | ||
| file | nome do arquivo ((incluíndo a extensão e o caminho, caso não esteja no diretório de trabalho)) |<code rsplus> "nome_arquivo.txt"</code>| <code rsplus>"/caminho_dir/nome_arquivo.txt"</code> | | | file | nome do arquivo ((incluíndo a extensão e o caminho, caso não esteja no diretório de trabalho)) |<code rsplus> "nome_arquivo.txt"</code>| <code rsplus>"/caminho_dir/nome_arquivo.txt"</code> | | ||
| header | nome das variáveis ((utiliza a primeira linha dos dados para o nome das colunas))| <code rsplus>FALSE </code>| <code rsplus>TRUE </code>| | | header | nome das variáveis ((utiliza a primeira linha dos dados para o nome das colunas))| <code rsplus>FALSE </code>| <code rsplus>TRUE </code>| | ||
- | | sep | separador ((qual o símbolo separa os dados em uma linha. Ex: "\t" é tabulação)) |<code rsplus>" " </code>| <code rsplus> "," ";" "\t"</code> | | + | | sep | separador ((qual o símbolo separa os dados de uma mesma linha em colunas. Ex: "\t" é tabulação)) |<code rsplus>" " </code>| <code rsplus> "," ";" "\t"</code> | |
| dec | símbolo de decimal | <code rsplus>"." </code>|<code rsplus> "," </code>| | | dec | símbolo de decimal | <code rsplus>"." </code>|<code rsplus> "," </code>| | ||
| as.is| mantenha caracteres ((O padrão até a versão 4.0 do R era transformar caracteres em fator na leitura. A partir dessa versão o padrão mudou e a versão mais recente da função não faz essa transformação automática. )) | <code rsplus> TRUE </code> | <code rsplus>FALSE </code>| | | as.is| mantenha caracteres ((O padrão até a versão 4.0 do R era transformar caracteres em fator na leitura. A partir dessa versão o padrão mudou e a versão mais recente da função não faz essa transformação automática. )) | <code rsplus> TRUE </code> | <code rsplus>FALSE </code>| | ||
Linha 123: | Linha 123: | ||
- | Entre na página [[:dados:dados-caixeta|levantamento de espécies em caixetais]], leia a descrição dos dados e das variáveis e salve o arquivo de dados no diretório de trabalho. | + | Entre na página [[:dados:dados-caixeta|levantamento de espécies em caixetais]], leia a descrição dos dados e das variáveis e salve o arquivo de dados no diretório de trabalho. |
- | **Obs.**: Se o arquivo abrir em uma aba do navegador, clique com o botão direito do mouse no link e selecione "salvar link" LOL. | + | **Obs.**: Se o arquivo abrir em uma aba do navegador, clique com o botão direito do mouse no link e selecione "salvar link". |
Vamos fazer a leitura do arquivo com o padrão de leitura da função ''read.table'' e verificar em seguida a classe e a formatação do arquivo: | Vamos fazer a leitura do arquivo com o padrão de leitura da função ''read.table'' e verificar em seguida a classe e a formatação do arquivo: | ||
Linha 142: | Linha 142: | ||
</code> | </code> | ||
- | Indicando que tentou ler o arquivo, mas algumas linhas tinham dimensão diferentes, ou seja, o formato não era tabular. Isso ocorre, normalmente devido ao tipo de separador de campo utilizado no arquivo que não é espaço, o padrão da função. No caso, o separador é '','' como relatado na documentação dos dados. Vamos usar o argumento ''sep'' para indicar o separador. Em seguida vamos verificar a classe do objeto. | + | Indicando que tentou ler o arquivo, mas algumas linhas tinham dimensões diferentes, ou seja, o formato não era tabular. Isso ocorre, normalmente, devido ao tipo de separador de campo utilizado no arquivo que não é espaço, o padrão da função. No caso, o separador é '','' como relatado na documentação dos dados. Vamos usar o argumento ''sep'' para indicar o separador. Em seguida vamos verificar a classe do objeto. |
Linha 170: | Linha 170: | ||
===== Data Frames ===== | ===== Data Frames ===== | ||
- | A classe do objeto é um ''data.frame''. Esse é segundo tipo de objetos para armazenar dados no R que apresentamos: o ''vetor'' tem apenas uma dimensão de dados, o ''data.frame'' tem duas. Os datas frames no R são conjuntos de vetores de mesmo tamanho, similares a uma planilha de dados. Todas as características que vimos do objeto ''vetor'', valem para as colunas do ''data.frame''. Uma outra forma de pensar o data frame é que são variáveis (colunas) de um conjunto de observações (linhas). Assim como deve ser uma planilha de dados bem estruturada. | + | A classe do objeto é um ''data.frame''. Esse é o segundo tipo de objeto para armazenar dados no R que apresentamos: o ''vetor'' tem apenas uma dimensão de dados, o ''data.frame'' tem duas. Os datas frames no R são conjuntos de vetores de mesmo tamanho, similares a uma planilha de dados. Todas as características que vimos do objeto ''vetor'', valem para as colunas do ''data.frame''. Uma outra forma de pensar o data frame é que são variáveis (colunas) de um conjunto de observações (linhas). Assim como deve ser uma planilha de dados bem estruturada. |
- | Vamos insistir em uma sugestão importante, que evita muitos transtornos para quem está iniciando no R é: depois de efetuar a leitura **sempre verificar a estrutura dos dados antes de iniciar as análises**, usando as funções indicadas acima. | + | Vamos insistir em uma sugestão importante, que evita muitos transtornos para quem está iniciando no R é: depois de efetuar a leitura **sempre verificar a estrutura dos dados antes de iniciar as análises**, usando as funções indicadas acima. |
Linha 182: | Linha 182: | ||
</code> | </code> | ||
- | Apesar de ter sido lido o objeto não parece o que deveria. A dimensão do objeto mostra que tem uma observação a mais, os nomes das variáveis não corresponde ao que está definido no metadado e as variáveis foram todas lidas com ''characters'' ou ''factor'' dependendo da versão do R. O ''head'' mostra exatamente o que aconteceu: a linha com os nomes das variáveis foi lida como sendo uma observação. Com isso, todas as variáveis foram classificadas como caracteres. Vamos agora usar o argumento ''header'' e fazer novamente a verificação: | + | Apesar do objeto ter sido lido, ele não parece o que deveria. A dimensão do objeto mostra que tem uma observação a mais, os nomes das variáveis não corresponde ao que está definido no metadado e as variáveis foram todas lidas com ''characters'' ou ''factor'' dependendo da versão do R. O ''head'' mostra exatamente o que aconteceu: a linha com os nomes das variáveis foi lida como sendo uma observação. Com isso, todas as variáveis foram classificadas como caracteres. Vamos agora usar o argumento ''header'' e fazer novamente a verificação: |
Linha 193: | Linha 193: | ||
</code> | </code> | ||
- | No código acima temos resultados que podem variar dependendo da versão do R. Isso não é muito comum, pois a equipe de desenvolvedores busca manter a compatibilidade do scripts entre versões. | + | No código acima temos resultados que podem variar dependendo da versão do R. Isso não é muito comum, pois a equipe de desenvolvedores busca manter a compatibilidade dos scripts entre versões. |
Linha 200: | Linha 200: | ||
**__stringsAsFactors__** | **__stringsAsFactors__** | ||
- | Por padrão, até a versão anterior a 4.0.0 de abril de 2020, o padrão das funções ''read.table'' e ''data.frame'' era classificar as variáveis com caracteres como sendo um fator. Isso era definido com os padrões dos argumentos ''stringsAsFactors = TRUE'' ou ''as.is = FALSE''. Desde da versão 4.0.0 o padrão é classificar as variáveis que contém caracteres como sendo ''character''. Essa conversão automática para fator é um legado da linguagem S((veja artigo sobre essa mudança em [[https://developer.r-project.org/Blog/public/2020/02/16/stringsasfactors/index.html| developer blog]])). | + | Por padrão, até a versão anterior a 4.0.0 de abril de 2020, o padrão das funções ''read.table'' e ''data.frame'' era classificar as variáveis com caracteres como sendo um fator. Isso era definido com os padrões dos argumentos ''stringsAsFactors = TRUE'' ou ''as.is = FALSE''. Desde da versão 4.0.0 o padrão é classificar as variáveis que contém caracteres como sendo ''character''. O que acontece é que a partir dessa versão o padrão para ''as.is = !stringAsFactor'' e a função ''read.table'' incorporou o argumento ''stringAsFactors = TRUE''. Ou seja, por padrão o ''stringAsFactor'' diz para a função transformar caracteres em fator, mas é sobreposto pelo argumento ''as.is'' que inverte o valor lógico com ''!''. Essa conversão automática para fator é um legado da linguagem S((veja artigo sobre essa mudança em [[https://developer.r-project.org/Blog/public/2020/02/16/stringsasfactors/index.html| developer blog]])). |
</WRAP> | </WRAP> | ||
Linha 208: | Linha 208: | ||
- | Vamos então transformar as variáveis ''local'' e ''especie'' para fator, assim independente da versão do R instalada, estaremos todos com a mesma estrutura de objeto. | + | Vamos então transformar as variáveis ''local'' e ''especie'' para fator, assim independente da versão do R instalada, estaremos todos com a mesma estrutura de objeto. |
Linha 264: | Linha 264: | ||
</code> | </code> | ||
- | Uma outra forma de indexar é pelas posições da linha e coluna. No caso do ''data.frame'' isso é feito pela indicação das duas posições separadas por vírgula entre colchetes ''[ , ]''. Sempre o valor antes da vírgula se refere a primeira dimensão do ''data.frame'' que são as linha (observações) e o valor depois refere-se a coluna (variável). | + | Uma outra forma de indexar é pelas posições da linha e coluna. No caso do ''data.frame'' isso é feito pela indicação das duas posições separadas por vírgula entre colchetes ''[ , ]''. Sempre o valor antes da vírgula se refere a primeira dimensão do ''data.frame'' que são as linhas (observações) e o valor depois refere-se a coluna (variável). |
Linha 361: | Linha 361: | ||
Nesse caso, a indexação da coluna pode ser feita pelo nome da variável ou pela posição e também pode ser combinada. | Nesse caso, a indexação da coluna pode ser feita pelo nome da variável ou pela posição e também pode ser combinada. | ||
- | E se quisermos o inverso, o nome e a idade dos que nasceram depois de 1940? Precisamos só inverter o vetor de ''TRUE'' e ''FALSE'' usando o operador ''!'': | + | E se quisermos o inverso, o nome e a idade dos que nasceram depois de 1940? Precisamos só inverter o vetor de ''TRUE'' e ''FALSE'' usando o operador ''!'': |
Linha 400: | Linha 400: | ||
==== Salvando Data Frame ==== | ==== Salvando Data Frame ==== | ||
- | Após manipular os dados no R podemos salvar uma nova versão em um arquivo texto. Para salvar a nossa nova versão dos dados de caixetais, que incorpora o ''dap'', usamos a função ''write.table''. Os parâmetros são parecidos com a função de leitura, só que precisamos indicar qual o objeto deve ser salvo e nome do arquivo que será gravado. Caso queira salvar em um local diferente do diretório de trabalho deve também fornecer o caminho das pastas do computador. Abaixo estamos salvando os dados no arquivo ''caixeta.txt'', com os campos separados por tabulação (''\t'') e indicando que não queremos salvar nomes de linhas((Por padrão a função ''write.table'' salvará o valor de indexação da linha como o nome da observação)) (''row.names= FALSE'') | + | Após manipular os dados no R podemos salvar uma nova versão em um arquivo texto. Para salvar a nossa nova versão dos dados de caixetais, que incorpora o ''dap'', usamos a função ''write.table''. Os parâmetros são parecidos com a função de leitura, só que precisamos indicar qual o objeto a ser salvo e nome do arquivo no qual ele será gravado. Caso queira salvar em um local diferente do diretório de trabalho deve também fornecer o caminho das pastas do computador. Abaixo estamos salvando os dados no arquivo ''caixeta.txt'', com os campos separados por tabulação (''\t'') e indicando que não queremos salvar nomes de linhas((Por padrão a função ''write.table'' salvará o valor de indexação da linha como o nome da observação)) (''row.names= FALSE'') |
<code rsplus| Salvando arquivos de dados> | <code rsplus| Salvando arquivos de dados> | ||
Linha 426: | Linha 426: | ||
</code> | </code> | ||
- | Agora podemos rodar novamente a linha de comando do ''write.table'' e gravar o nosso arquivo ''caixeta.txt'' no diretório ''dados'', subordinado ao diretório de trabalho que a sessão do R está associado. | + | Agora podemos rodar novamente a linha de comando do ''write.table'' e gravar o nosso arquivo ''caixeta.txt'' no diretório ''dados'', subordinado ao diretório de trabalho que a sessão do R está associado. |
Linha 432: | Linha 432: | ||
**__Formato de Arquivo de Dados__** | **__Formato de Arquivo de Dados__** | ||
- | Arquivos de dados no formato de texto são uma forma segura de salvar conjunto de dados pequenos ou medianos ( ~100 mil registros). Os formatos mais usados são os com campo separados por espaço (padrão do ''read.table''), separado por vírgula ou ponto e vírgula, normalmente com extensão ''.csv'', ou tabulação, normalmente com extensão ''.txt''. A extensão é apenas uma indicação de formato e como é possível salvar o arquivo com qualquer extensão, precisamos saber qual estrutura foi utilizada para salvar os dados. O excel em sistemas operacionais em português salva arquivos ''csv'' separados por '';'', com símbolo de decimal '','', o que causa bastante confusão. Nossa sugestão é que configure seu computador para decimal com ''.'' e estabeleça o seu padrão de separação de campo, deixando indicado em um arquivo acessório de metadados. Antes de ler um arquivo de dados de texto que desconheça a formatação, abra em um arquivo de edição de texto simples, como o bloco de notas, para verificar os símbolos de separação de campo e decimal. | + | Arquivos de dados no formato de texto são uma forma segura de salvar conjunto de dados pequenos ou medianos ( ~100 mil registros). Os formatos mais usados são os com campo separados por espaço (padrão do ''read.table''), separados por vírgula ou ponto e vírgula, normalmente com extensão ''.csv'', ou tabulação, normalmente com extensão ''.txt''. A extensão é apenas uma indicação de formato e como é possível salvar o arquivo com qualquer extensão, precisamos saber qual estrutura foi utilizada para salvar os dados. O excel em sistemas operacionais em português salva arquivos ''csv'' separados por '';'', com símbolo de decimal '','', o que causa bastante confusão. Nossa sugestão é que configure seu computador para decimal com ''.'' e estabeleça o seu padrão de separação de campo, deixando indicado em um arquivo acessório de metadados. Antes de ler um arquivo de dados de texto que desconheça a formatação, abra em um arquivo de edição de texto simples, como o bloco de notas, para verificar os símbolos de separação de campo e decimal. |
Linha 447: | Linha 447: | ||
===== Matrizes ===== | ===== Matrizes ===== | ||
- | Outro tipo de objeto no R com estrutura tabular é a ''matrix'', que está associado à álgebra linear. A principal diferença com ''data.frame'' é que ''matrix'' só aceita uma classe de dados, assim como ''vector''. A ''matrix'' é usada no sentido de matrizes da álgebra linear e operações matriciais. | + | Outro tipo de objeto no R com estrutura tabular é a ''matrix'', que está associado à álgebra linear. A principal diferença com ''data.frame'' é que ''matrix'' só aceita uma classe de dados, assim como ''vector''. A ''matrix'' é usada no sentido de matrizes da álgebra linear e operações matriciais. |
Vamos aprender o objeto ''matrix'' associada ao estudo de dinâmica populacional. | Vamos aprender o objeto ''matrix'' associada ao estudo de dinâmica populacional. | ||
Linha 568: | Linha 568: | ||
**__Modelos Matriciais de Dinâmica Populacional__** | **__Modelos Matriciais de Dinâmica Populacional__** | ||
- | Com um pouco mais álgebra linear você pode obter muito mais informações sobre características da população biológica, apenas a partir das informações intrínsecas da matriz de transição (autovalores e autovetores). Por exemplo, a taxa de crescimento (λ) da população é o primeiro autovalor da matriz de transição, enquanto que o valor reprodutivo e a distribuição da proporção dos estágios no equilíbrio estão relacionados aos autovetores. Esses valores podem ser obtidos com a função ''eigen''((consulte a ajuda para interpretar o resultados dessa função)). Para saber como calcular esses valores veja o [[http://ecologia.ib.usp.br/ecopop/doku.php?id=roteiros:matriz|roteiro da disciplina de ecologia de populações]] na qual esse tópico foi baseado. | + | Com um pouco mais de álgebra linear você pode obter muito mais informações sobre características da população biológica, apenas a partir das informações intrínsecas da matriz de transição (autovalores e autovetores). Por exemplo, a taxa de crescimento (λ) da população é o primeiro autovalor da matriz de transição, enquanto que o valor reprodutivo e a distribuição da proporção dos estágios no equilíbrio estão relacionados aos autovetores. Esses valores podem ser obtidos com a função ''eigen''((consulte a ajuda para interpretar o resultados dessa função)). Para saber como calcular esses valores veja o [[http://ecologia.ib.usp.br/ecopop/doku.php?id=roteiros:matriz|roteiro da disciplina de ecologia de populações]] na qual esse tópico foi baseado. |
Linha 583: | Linha 583: | ||
- | Um formato de dados clássico em ecologia de comunidades é o de espécies por localidade, como a ocorrência ou a contagem de indivíduos. Já usamos a função ''table'' para contagem de uma variável tipo ''fator''. Vamos construir essa nova estrutura de dados a partir do objeto ''caixeta'' e fazer a coerção para a classe matrix. | + | Um formato de dados clássico em ecologia de comunidades é o de espécies por localidade, como a ocorrência ou a contagem de indivíduos. Já usamos a função ''table'' para contagem de uma variável tipo ''fator''. Vamos construir essa nova estrutura de dados a partir do objeto ''caixeta'' e fazer a coerção para a classe matrix. |
- | <code rsplus> | + | <code rsplus| Matriz caixeta> |
str(caixeta) | str(caixeta) | ||
caixTable <- table(caixetaespecie, caixetalocal) | caixTable <- table(caixetaespecie, caixetalocal) | ||
Linha 603: | Linha 603: | ||
Vamos agora fazer a manipulação desses dados para saber quantos indivíduos e espécies temos na localidade ''jureia''. Primeiro precisamos manipular o objeto ''caixMatrix'' para que ela tenha apenas a informação de ocorrência | Vamos agora fazer a manipulação desses dados para saber quantos indivíduos e espécies temos na localidade ''jureia''. Primeiro precisamos manipular o objeto ''caixMatrix'' para que ela tenha apenas a informação de ocorrência | ||
- | <code rsplus> | + | <code rsplus| Operando caixeta> |
caixMatrix[caixTable > 0 ] <- 1 | caixMatrix[caixTable > 0 ] <- 1 | ||
head(caixTable) | head(caixTable) | ||
Linha 612: | Linha 612: | ||
Agora podemos contar a coluna ''jureia'' em cada uma dos objetos: | Agora podemos contar a coluna ''jureia'' em cada uma dos objetos: | ||
- | <code resplus> | + | <code resplus| Operando jureia > |
sum(caixTable[, "jureia"]) | sum(caixTable[, "jureia"]) | ||
sum(caixMatrix[, "jureia"]) | sum(caixMatrix[, "jureia"]) | ||
Linha 620: | Linha 620: | ||
- | <code resplus> | + | <code resplus| Apply em matriz > |
apply(caixTable, MARGIN = 2, FUN = sum) | apply(caixTable, MARGIN = 2, FUN = sum) | ||
apply(caixMatrix, 2, sum) | apply(caixMatrix, 2, sum) | ||
</code> | </code> | ||
- | ==== Juntando Matrizes ==== | + | ===== Combinando Dados Tabulares ==== |
É comum termos informações que estão em formato de dados tabulares e precisam ser agrupadas com outro conjunto de dados. Vamos olhar algumas das ferramentas para fazer isso. | É comum termos informações que estão em formato de dados tabulares e precisam ser agrupadas com outro conjunto de dados. Vamos olhar algumas das ferramentas para fazer isso. | ||
Linha 634: | Linha 634: | ||
=== Combinando colunas ou linhas === | === Combinando colunas ou linhas === | ||
- | As funções ``rbind`` e ´´cbind´´ são utilizada para concatenar dados pelas linhas ou colunas. Entretanto, só funcionam se a estrutura é a mesma, ou seja as variáveis são as mesmas e na mesma posição para acrescentar novas observações, ou as observações estão nas mesmas linhas para acrescentar novas variáveis. | + | As funções ''rbind'' e ''cbind'' são utilizadas para concatenar dados tabulares pelas linhas ou colunas. Entretanto, só funcionam se a estrutura é a mesma, ou seja as variáveis são as mesmas e na mesma posição para acrescentar novas observações, ou as observações estão nas mesmas linhas para acrescentar novas variáveis. |
- | <code rsplus> | + | <code rsplus| Combinando matrizes> |
- | trapa <- read.table("/home/aao/Ale2016/AleCursos/RUSP/R2020/Aulas/Aula3_dados/dados/trapa.csv", header = TRUE, sep = ",") | + | trapa <- read.table("http://ecor.ib.usp.br/lib/exe/fetch.php?media=dados:trapa.csv", header = TRUE, sep = ",") |
str(trapa) | str(trapa) | ||
- | trapa | ||
- | trapaNome <- read.table("/home/aao/Ale2016/AleCursos/RUSP/R2020/Aulas/Aula3_dados/dados/trapa_nome.txt", header = TRUE, sep = ",") | + | trapaNome <- read.table("http://ecor.ib.usp.br/lib/exe/fetch.php?media=dados:trapa_nome.txt", header = TRUE, sep = ",") |
str(trapaNome) | str(trapaNome) | ||
+ | |||
trapaNome | trapaNome | ||
trapa | trapa | ||
- | |||
- | trapacodinome == "Mussum" | trapacodinome == "Dede" | ||
- | trapa$codinome %in% c("Dede", "Mussum") | ||
- | trapacodinome %in% trapaNomecodinome | ||
- | |||
rbind(trapa, trapa) | rbind(trapa, trapa) | ||
trapabind <- cbind(trapa, trapaNome) | trapabind <- cbind(trapa, trapaNome) | ||
- | trapabind$vivo | ||
- | names(trapabind) | ||
- | trapabind$nascimento | ||
- | trapabind[,7] | ||
- | str(trapabind) | ||
- | === Merge === | + | </code> |
+ | |||
+ | ==== Outras formas de combinar ==== | ||
+ | |||
+ | Quando colunas ou linhas não podem ser combinadas diretamente, porque as posições não são compatíveis, podemos usar as funções ''merge'' e ''match''. O ''merge'' combina dois objetos por uma coluna que é a referência comum, combinando as variáveis de ambos ''dataframe''. O ''match'' funciona também a partir de uma variável comum a ambos objetos e produz um índice de posição que ordena um dos objetos na mesma posição que o outro. O ''match'' é um pouco mais difícil de entender, mas é uma ferramenta poderosa para manipular dados tabulares. Abaixo apresentamos ambas funções manipulando dados muito simples para demonstrar como funcionam. | ||
+ | |||
+ | <code rsplus| Merge> | ||
+ | ## merge | ||
merge(trapa, trapaNome, by = "codinome") | merge(trapa, trapaNome, by = "codinome") | ||
Linha 671: | Linha 668: | ||
merge(trapa, trapaNome, by = "codinome") | merge(trapa, trapaNome, by = "codinome") | ||
- | === match === | ||
+ | ## match | ||
(matchtrap <- match(trapacodinome, trapaNomecodinome)) | (matchtrap <- match(trapacodinome, trapaNomecodinome)) | ||
Linha 685: | Linha 682: | ||
- | <code rsplus> | + | <code rsplus| Array> |
class(pop) | class(pop) | ||
</code> | </code> | ||
- | A classe é ''matrix'' mas a classe parental é ''array''. Essa possibilidade de um ''array'' ter muitas dimensões abre a possibilidade de efetuarmos operações e análises em múltiplas dimensões. As características e operações que fizemos em ''matrix'' se aplicam também para ''array''. | + | A classe é ''matrix'' mas a classe parental é ''array''. Essa possibilidade de um ''array'' ter muitas dimensões permite efetuarmos operações e análises em múltiplas dimensões. As características e operações que fizemos em ''matrix'' se aplicam também para ''array''. |
Vamos avaliar um objeto dessa classe chamado ''Titanic''. Primeiro vamos entender onde está esse objeto. | Vamos avaliar um objeto dessa classe chamado ''Titanic''. Primeiro vamos entender onde está esse objeto. | ||
Linha 696: | Linha 693: | ||
A função ''search'' mostra o caminho de busca nos compartimentos de memória da sessão do R. Nele há um pacote chamado ''datasets'' que é carregado por padrão ao abrirmos uma sessão do R. | A função ''search'' mostra o caminho de busca nos compartimentos de memória da sessão do R. Nele há um pacote chamado ''datasets'' que é carregado por padrão ao abrirmos uma sessão do R. | ||
- | <code rsplus> | + | <code rsplus| Datasets> |
search() | search() | ||
ls("package:datasets") | ls("package:datasets") | ||
Linha 702: | Linha 699: | ||
</code> | </code> | ||
- | Isso significa que esse objeto está disponível para uso sem a necessidade de carregá-lo. Vamos investiga alguns atributos dele: | + | Isso significa que esse objeto está disponível para uso sem a necessidade de carregá-lo. Vamos investigar alguns atributos dele: |
- | <code rsplus> | + | <code rsplus| Titanic> |
is.array(Titanic) | is.array(Titanic) | ||
dim(Titanic) | dim(Titanic) | ||
Linha 712: | Linha 709: | ||
Um tanto mais complicado de visualizar os dados do que uma planilha. Imagine os quatro níveis de ''Class'' como sendo as linhas de um planilha, ''sex'' como as colunas, ''age'' como sendo a repetição dessa estrutura para ''Child'' e ''Adult'', por fim essa estrutura replicada para ''Survived'' igual a ''No'' e ''Yes''. Como as quatro dimensões tem tamanhos pequenos é possível visualizar todos dados: | Um tanto mais complicado de visualizar os dados do que uma planilha. Imagine os quatro níveis de ''Class'' como sendo as linhas de um planilha, ''sex'' como as colunas, ''age'' como sendo a repetição dessa estrutura para ''Child'' e ''Adult'', por fim essa estrutura replicada para ''Survived'' igual a ''No'' e ''Yes''. Como as quatro dimensões tem tamanhos pequenos é possível visualizar todos dados: | ||
- | <code rsplus> | + | <code rsplus|Estrutura array> |
str(Titanic) | str(Titanic) | ||
Titanic | Titanic | ||
Linha 721: | Linha 718: | ||
Será que crianças e adultos tiveram a mesma proporção de vítimas? | Será que crianças e adultos tiveram a mesma proporção de vítimas? | ||
- | <code rsplus> | + | <code rsplus| Array apply> |
apply(Titanic, c("Age", "Survived"), sum) | apply(Titanic, c("Age", "Survived"), sum) | ||
</code> | </code> | ||
Linha 727: | Linha 724: | ||
Será que a proporção de vítimas entre homens e mulheres foi similar? | Será que a proporção de vítimas entre homens e mulheres foi similar? | ||
- | <code rsplus> | + | <code rsplus| Array apply II> |
apply(Titanic, c("Sex", "Survived"), sum) | apply(Titanic, c("Sex", "Survived"), sum) | ||
</code> | </code> | ||
Linha 733: | Linha 730: | ||
E entre os passageiros de diferentes classes? | E entre os passageiros de diferentes classes? | ||
- | <code rsplus> | + | <code rsplus| Array apply III> |
apply(Titanic, c("Class", "Survived"), sum) | apply(Titanic, c("Class", "Survived"), sum) | ||
</code> | </code> | ||
Linha 750: | Linha 747: | ||
Vamos criar a nossa primeira lista com alguns objetos desse tutorial: | Vamos criar a nossa primeira lista com alguns objetos desse tutorial: | ||
- | <code rsplus> | + | <code rsplus| Criando listas> |
minhaLista <- list(vectorNum = num, dfTrapa = trapalhoes, matPop = pop, arrayTit = Titanic) | minhaLista <- list(vectorNum = num, dfTrapa = trapalhoes, matPop = pop, arrayTit = Titanic) | ||
str(minhaLista) | str(minhaLista) | ||
Linha 757: | Linha 754: | ||
A indexação da lista é um misto das classes de objetos que vimos anteriormente. Na sua primeira dimensão aceita tanto o nome com ''$'' como um ''data.frame'' quanto um novo indexador que é o ''[''''['' colchete duplo. | A indexação da lista é um misto das classes de objetos que vimos anteriormente. Na sua primeira dimensão aceita tanto o nome com ''$'' como um ''data.frame'' quanto um novo indexador que é o ''[''''['' colchete duplo. | ||
- | <code rsplus> | + | <code rsplus| Indexando listas> |
minhaLista <- list(vectorNum = num, dfTrapa = trapalhoes, matPop = pop, arrayTit = Titanic) | minhaLista <- list(vectorNum = num, dfTrapa = trapalhoes, matPop = pop, arrayTit = Titanic) | ||
str(minhaLista) | str(minhaLista) | ||
Linha 767: | Linha 764: | ||
Os elementos de cada posição podem ser acessados usando as indexações correspondentes a cada classe! | Os elementos de cada posição podem ser acessados usando as indexações correspondentes a cada classe! | ||
- | <code rsplus>correpondentes | + | <code rsplus| Niveis de indexação> |
minhaLista$dfTrapa[, "nomes"] | minhaLista$dfTrapa[, "nomes"] | ||
minhaLista[[3]][1,] | minhaLista[[3]][1,] | ||
Linha 774: | Linha 771: | ||
<WRAP center round tip 60%> | <WRAP center round tip 60%> | ||
- | Lembre-se sempre de olhar o ''help''. Não cometa o 7º pecado da lista do início desse tutorial, acostume-se com a documentação e como a sua estrutura. Toda as funções nesse tutorial são um link que leva à sua documentação. | + | Lembre-se sempre de olhar o ''help''. Não cometa o 7º pecado da lista do início desse tutorial, acostume-se com a documentação e como a sua estrutura. Todas as funções nesse tutorial apresentam um hiperlink que leva à sua documentação. |
Linha 780: | Linha 777: | ||
====== Um Exemplo ====== | ====== Um Exemplo ====== | ||
- | No vídeo abaixo apresento um exemplo de manipulação de dados de um estudo sobre dinâmica de população de uma espécie de árvore (//Guapira opposita//) da floresta atlântica. | + | No vídeo abaixo apresento um exemplo de manipulação de dados de um estudo sobre dinâmica de população de uma espécie de árvore (//Guapira opposita//) da floresta atlântica, utilizando matrizes e arrays. |
<WRAP center round box 60%> | <WRAP center round box 60%> |