[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