dificuldade para gerar um loop

Caros, estou com um problema que deve ser simples de responder mas que eu fiquei empacado. Tenho uma base de dados (data frama) com 15.245 linhas por 369 colunas. Destas 369 colunas as 19 primeiras são médias de variáveis ambientais (retiradas do worldclim) e 330 representam a presená/ausência de determinada espécie nas células. a matrix ficaria assim: Rangebio2 StdDevbio2 CoefVarbio2 Minbio3 Meanbio3 Agalychniscallidryas Agalychnislitodryas Acriscrepitans 2.402 0.034 50 50.889 51.0 0 0 0 1.680 0.022 50 51.611 51.5 0 0 0 1.136 0.014 50 51.344 51.5 0 0 0 0.860 0.011 50 50.867 50.5 0 0 0 2.819 0.045 46 46.971 47.0 0 0 0 2.126 0.032 47 47.639 48.0 0 0 0 O problema é que eu preciso de uma média de cada variável climática para cada espécie, que são 330 em coluna. Minha primeira tentativa foi gerar um classificador com cada espécie e usar o nome da espécie como id e fazer as operações. isso não funcionou. O que eu fiz então, foi usar o seguinte comando: with(spp, mean(Meanbio1 [Agalychnisannae!=0])) Isso funciona bem. O problema é que são 330 nomes e mais 18 variáveis para fazer. tentei fazer um loop para chamar todos os nomes e gerar uma tabela de saida com o nome da espécie (nome da coluna) e a média da variável mas não consegui nada. Por isso gostaria de saber se alguém poderia me dar uma força sugerindo uma forma de fazer esse loop ou indicando outra possibilidade. Como apenas abri o data frame e usei esta função este é o código mínimo (e único) que eu tenho. Obrigado antecipadamente Mauricio

Caro, Tente usar as funções lapply é melhor que loop list.mean <- lapply(df[,-c(1:19)], function(x){ with(df, mean(xl)) }) list.mean <- lapply(list.aov, mean) ions.mean2 <- ldply(list.mean) Alisson Lucrécio da Costa ________________________________ From: mauricio osvaldo moura <mauricio.moura@ufpr.br> To: r-br@listas.c3sl.ufpr.br Sent: Monday, July 2, 2012 1:54 PM Subject: [R-br] dificuldade para gerar um loop Caros, estou com um problema que deve ser simples de responder mas que eu fiquei empacado. Tenho uma base de dados (data frama) com 15.245 linhas por 369 colunas. Destas 369 colunas as 19 primeiras são médias de variáveis ambientais (retiradas do worldclim) e 330 representam a presená/ausência de determinada espécie nas células. a matrix ficaria assim: Rangebio2StdDevbio2CoefVarbio2Minbio3Meanbio3 AgalychniscallidryasAgalychnislitodryasAcriscrepitans 2.402 0.034 50 50.889 51.0 0 0 0 1.680 0.022 50 51.611 51.5 0 0 0 1.136 0.014 50 51.344 51.5 0 0 0 0.860 0.011 50 50.867 50.5 0 0 0 2.819 0.045 46 46.971 47.0 0 0 0 2.126 0.032 47 47.639 48.0 0 0 0 O problema é que eu preciso de uma média de cada variável climática para cada espécie, que são 330 em coluna. Minha primeira tentativa foi gerar um classificador com cada espécie e usar o nome da espécie como id e fazer as operações. isso não funcionou. O que eu fiz então, foi usar o seguinte comando: with(spp, mean(Meanbio1[Agalychnisannae!=0])) Isso funciona bem. O problema é que são 330 nomes e mais 18 variáveis para fazer. tentei fazer um loop para chamar todos os nomes e gerar uma tabela de saida com o nome da espécie (nome da coluna) e a média da variável mas não consegui nada. Por isso gostaria de saber se alguém poderia me dar uma força sugerindo uma forma de fazer esse loop ou indicando outra possibilidade. Como apenas abri o data frame e usei esta função este é o código mínimo (e único) que eu tenho. Obrigado antecipadamente Mauricio _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Você pode combinar apply() com aggregate(). O apply() percorre as colunas das espécies uma a uma e o aggregate() tira as médias por nível de espécie (0 ou 1). apply(colunas, 2, function(ci){ tbm <- aggregate(climaticas, list(coluna=ci), mean) return(tbm) }) Envie um CMR para ter um CMR. À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
participantes (3)
-
Alisson Lucrecio
-
mauricio osvaldo moura
-
Walmes Zeviani