[R-br] Ajuda com criação de loop para transforma lista em matrix de presença e ausencia

Augusto Ribas ribas.aca em gmail.com
Segunda Março 26 16:30:17 BRT 2012


Ola pessoal.
Estou aqui denovo pra pedir uma ajudinha.
Eu estou com uns dataframes com 2 colunas, uma são nome de especies de
hospedeiro e outra nome de especie de parasita.
Ai a lista é na verdade parasita tal ocorreu em hospedeiro fulano
Até aqui tudo bem, agora eu empaquei pq queria transformar isso  em uma
matriz de presensa e ausencia, com colunas sendo parasitos e linhas
hospedeiro, ai onde tem interação entre os 2 fica preenchido com 1
e onde nao tem com 0.
Eu fiz um exemplo com uma matriz pequenininha e como eu estou tentando
resolver.
Pensei em usar um teste de logica pra ir preenchendo a matriz mas eu não
sei como fazer isso de modo eficiente.
Pq o maximo que cheguei foi testar cada celula da matriz com toda a lista,
e como a lista é meio grande é meio perdido fazer assim.
Mas segue o exemplo que acho que ta facil entender, se alguem tiver uma
solução facil na manga faria minha semana muito feliz :)

#-------------------------------------------------------------------------------------------------
#exemplo de dados
dados<-data.frame(parasito=c("a","b","b","c","d","d"),
                  hospedeiro=c("1","1","1","2","2","3"))
#como eles estão agora
dados

#Eu preciso de uma matriz de presença e ausencia
#dai faço uma matriz
matriz<-matrix(data=NA,nrow=length(unique(dados$parasito)),
               ncol=length(unique(dados$hospedeiro)),
               dimnames=list(c(as.character(unique(dados$parasito))),
               c(as.character(unique(dados$hospedeiro)))))

#blz agora preciso que a lista em dados seja representada
#atraves dessa matriz
matriz

#Eu imaginei um teste assim
#Linha 1 coluna 1
matriz[1,1]<-ifelse(colnames(matriz)[1]==dados$hospedeiro[1]
       & rownames(matriz)[1]==dados$parasito[1]
       ,1,0)
#aqui eu testei se a primeira linha do data.frame corresponde a essa
interação, como corresponde ele coloca 1

matriz

#linha 1 Coluna 2
matriz[1,2]<-ifelse(colnames(matriz)[2]==dados$hospedeiro[1]
       & rownames(matriz)[1]==dados$parasito[1]
       ,1,0)
#o mesmo pra linha 1 coluna 2, ele coloca 0 pq a a primeira linha do
data.frame não corresponde a essa interação
matriz

#Blz, mas eu não consegui pensar em um jeito de faze ele rodar pra
#toda a matriz que eu tenho de forma direta, eu queria monta um loop
#ou algo do tipo que eu so fala-se o tamanho da matriz e ele testa-se
#logo tudo, ou melhor acho que seria faze algo que olhe a lista
#e teste pra cada linha da lista e ponha um 1 la na matriz

Obrigado e boa semana a todos.

-- 
Grato
Augusto C. A. Ribas

Site Pessoal: http://augustoribas.heliohost.org
Lattes: http://lattes.cnpq.br/7355685961127056
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20120326/472ae2eb/attachment.html>


Mais detalhes sobre a lista de discussão R-br