Ferramentas do usuário

Ferramentas do site


02_tutoriais:tutorial3:start

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
02_tutoriais:tutorial3:start [2022/05/31 12:42]
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, normalmentedevido 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 é 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 ​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(caixeta$especie,​ caixeta$local) caixTable <- table(caixeta$especie,​ caixeta$local)
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`` ´´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'' ​''​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
- 
-trapa$codinome == "​Mussum"​ | trapa$codinome == "​Dede"​ 
-trapa$codinome %in% c("​Dede",​ "​Mussum"​) 
-trapa$codinome %in% trapaNome$codinome 
- 
  
 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(trapa$codinome,​ trapaNome$codinome)) (matchtrap <- match(trapa$codinome,​ trapaNome$codinome))
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. ​
  
  
02_tutoriais/tutorial3/start.1654011773.txt.gz · Última modificação: 2022/05/31 12:42 por adalardo