
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