[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 17:07:55 BRT 2012


Resolvido, eu não sei pq compliquei tanto.

Obtive uma resposta assim:

#--------------
with(dados, ifelse(table(parasito, hospedeiro) > 0, 1, 0))
#---------------

So não tinha conseguido visualizar isso sozinho.
Mas agradeço a atenção de qualquer forma :)



Em 26 de março de 2012 15:30, Augusto Ribas <ribas.aca em gmail.com> escreveu:

> 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
>
>


-- 
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/74e2d7f0/attachment.html>


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