'subsetting' de um dataframe, como fazer uma função ou loop?

Bom dia pessoal, estou com uma dúvida no 'subsetting' de um dataframe de 44 variaveis ambientais, onde as primeras dos são 'MONTH' e 'YEAR' (categóricas), e o resto são numericas (algumas contem NAs) Estou a precisar usar uma função para criar um novo data frame onde as variaveis numericas [ , 4:44] sejam colocadas em promedios por 'MONTH', bom aqui vai um exemplo do CMR que estou a usar: #o data frame str(OCTOPUS_S_2003) 'data.frame': 115 obs. of 44 variables: $ ID : int 157 158 159 160 161 162 163 164 165 166 ... $ Year : Factor w/ 10 levels "2003","2004",..: 1 1 1 1 1 1 1 1 1 1 ... $ Month : int 1 2 3 4 5 6 7 8 9 10 ... $ RainFall : num 88.4 123.2 98.2 NA 8.3 ... $ PLOBOI : int 128301 245454 280876 220158 25878 2546 $ PLOBOII : num 47.9 101.46 104.87 84.94 9.66 ... $ ALQUEVA : int 395168 91474 24386 28427 53978 28278 #eu consigo fazer para cada variable, mais uma de cada vez com o seguinte código (p.e. variavel nº 5 = PLOBOI: PLOBOI <- tapply(OCTOPUS_S_2003[ ,5], OCTOPUS_S_2003$Year, mean, na.rm =TRUE) #mas são 40 variaveis tirando ID, Year e Month ##Será que posso/devo fazer um loop? o uma função? obrigado Carlos P.D.: estou a usar o R R-215~1.2\\bin\\x64\ -- Carlos A. Pombo Sonderblohm PhD Student on Marine Science (Fisheries) Faculdade de Ciências e Tecnología Universidade do Algarve, Campus de Gambelas 8005-139 Faro Portugal Tef. 289 800 905 ext. 7605

No exemplo que você enviou, o objetivo seria calcular a media para todas as variáveis numéricas em função de year? Caso positivo tente usar o for() ou lapply(). Caso tenha problemas envie um CMR para tentarmos ajuda-lo. Caso preferir use um dput() ao enviar o CMR. Att. Tiago. Date: Thu, 7 Mar 2013 11:58:57 +0000 From: c.sonderblohm@gmail.com To: R-br@listas.c3sl.ufpr.br Subject: [R-br] 'subsetting' de um dataframe, como fazer uma função ou loop? Bom dia pessoal, estou com uma dúvida no 'subsetting' de um dataframe de 44 variaveis ambientais, onde as primeras dos são 'MONTH' e 'YEAR' (categóricas), e o resto são numericas (algumas contem NAs) Estou a precisar usar uma função para criar um novo data frame onde as variaveis numericas [ , 4:44] sejam colocadas em promedios por 'MONTH',bom aqui vai um exemplo do CMR que estou a usar:#o data frame str(OCTOPUS_S_2003)'data.frame': 115 obs. of 44 variables: $ ID : int 157 158 159 160 161 162 163 164 165 166 ... $ Year : Factor w/ 10 levels "2003","2004",..: 1 1 1 1 1 1 1 1 1 1 ... $ Month : int 1 2 3 4 5 6 7 8 9 10 ... $ RainFall : num 88.4 123.2 98.2 NA 8.3 ... $ PLOBOI : int 128301 245454 280876 220158 25878 2546 $ PLOBOII : num 47.9 101.46 104.87 84.94 9.66 ... $ ALQUEVA : int 395168 91474 24386 28427 53978 28278 #eu consigo fazer para cada variable, mais uma de cada vez com o seguinte código (p.e. variavel nº 5 = PLOBOI: PLOBOI <- tapply(OCTOPUS_S_2003[ ,5], OCTOPUS_S_2003$Year, mean, na.rm =TRUE) #mas são 40 variaveis tirando ID, Year e Month##Será que posso/devo fazer um loop? o uma função? obrigado Carlos P.D.: estou a usar o R R-215~1.2\\bin\\x64\ -- Carlos A. Pombo Sonderblohm PhD Student on Marine Science (Fisheries) Faculdade de Ciências e Tecnología Universidade do Algarve, Campus de Gambelas 8005-139 Faro Portugal Tef. 289 800 905 ext. 7605 _______________________________________________ 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.

aggregate(), não seria o caso? On 7 March 2013 09:36, Elias Teixeira Krainski <eliaskrainski@yahoo.com.br>wrote:
sapply(OCTOPUS_S_2003[, -(1:3)], tapply(OCTOPUS_S_2003[,2:3], mean, na.rm=TRUE))
_______________________________________________ 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.

Também, depende do formato de saída desejado... st <- sapply(OCTOPUS_S_2003[, -(1:3)], tapply(OCTOPUS_S_2003[,2:3], mean, na.rm=TRUE)) ag <- aggregate(OCTOPUS_S_2003[, -(1:3)], OCTOPUS_S_2003[,2:3], mean, na.rm=TRUE) str(st) str(ag) On Thu, 2013-03-07 at 09:41 -0300, FHRB Toledo wrote:
aggregate(), não seria o caso?
On 7 March 2013 09:36, Elias Teixeira Krainski <eliaskrainski@yahoo.com.br> wrote: sapply(OCTOPUS_S_2003[, -(1:3)], tapply(OCTOPUS_S_2003[,2:3], mean, na.rm=TRUE))
_______________________________________________ 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.
_______________________________________________ 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.

Usa o pacote plyr ou data.table. O data.table tem uma sintaxe simples e eh mais rápido que qualquer outro método do R. Abc Manoel Em 07/03/2013 09:47, "Elias Teixeira Krainski" <eliaskrainski@yahoo.com.br> escreveu:
Também, depende do formato de saída desejado...
st <- sapply(OCTOPUS_S_2003[, -(1:3)], tapply(OCTOPUS_S_2003[,2:3], mean, na.rm=TRUE)) ag <- aggregate(OCTOPUS_S_2003[, -(1:3)], OCTOPUS_S_2003[,2:3], mean, na.rm=TRUE) str(st) str(ag)
On Thu, 2013-03-07 at 09:41 -0300, FHRB Toledo wrote:
aggregate(), não seria o caso?
On 7 March 2013 09:36, Elias Teixeira Krainski <eliaskrainski@yahoo.com.br> wrote: sapply(OCTOPUS_S_2003[, -(1:3)], tapply(OCTOPUS_S_2003[,2:3], mean, na.rm=TRUE))
_______________________________________________ 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.
_______________________________________________ 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.
_______________________________________________ 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.

Boa tarde Pessoal! Preciso fazer um procedimento estatístico, no qual necessito que os grupos tenham o mesmo tamanho amostral, mas não posso perder as outras informações de cada amostra (outras variáveis). Por exemplo, nos dados abaixo, a variável GRUPO: o grupo 5 tem 18 amostras e o grupo 6 apenas 6 amostras. Gostaria de fazer um sorteio aleatório dentro do grupo 5, de tal forma a selecionar apenas 6 amostras destas, levando todas as informações junto das outas variáveis e assim, montando um subset. tentei programar algo, mas não sai muito do lugar....por isso nem postei nada de código! desde já, muito obrigada! Simone #================================================= # Os dados dados<- read.table('dados.txt', head=T) names(dados) grupo valor GRUPO 13 2340.0 5 13 62.0 5 13 102.0 5 13 854.0 5 13 492.0 5 13 133.0 5 14 2540.0 5 14 5140.0 5 14 1010.0 5 14 49999.0 5 14 71.4 5 14 5440.0 5 15 2360.0 5 15 439.0 5 15 79.0 5 15 3230.0 5 15 49999.0 5 15 675.0 5 16 49999.0 6 16 2610.0 6 16 455.0 6 16 954.0 6 16 5630.0 6 16 3890.0 6 #================================== ***---***---***---***---***---***---***---***---***---***---***---***---*** * Simone Daniela Sartorio * Professora Adjunta I da UFSCar, Centro de Ciências Agrárias, Campus Araras/SP. *Doutora e Mestre em Estatística e Experimentação Agronômica - ESALQ/USP; * Licenciada em Matemática - UNESP/Rio Claro. * Contatos: *tel: (19)3543-2614, ramal 2664 *cel: (19)8182-0586 - Tim ***---***---***---***---***---***---***---***---***---***---***---***---*** Tenha um bom dia! ;)

s <- split(dados, dados$GRUPO) s$"5" <- s$"5"[sample(1:nrow(s$"5"), 6),] do.call('rbind', s)

Elias, muito obrigada!!! Deu certinho! abraços Si ***---***---***---***---***---***---***---***---***---***---***---***---*** * Simone Daniela Sartorio * Professora Adjunta I da UFSCar, Centro de Ciências Agrárias, Campus Araras/SP. *Doutora e Mestre em Estatística e Experimentação Agronômica - ESALQ/USP; * Licenciada em Matemática - UNESP/Rio Claro. * Contatos: *tel: (19)3543-2614, ramal 2664 *cel: (19)8182-0586 - Tim ***---***---***---***---***---***---***---***---***---***---***---***---*** Tenha um bom dia! ;) ________________________________ De: Elias Teixeira Krainski <eliaskrainski@yahoo.com.br> Para: r-br@listas.c3sl.ufpr.br Enviadas: Quinta-feira, 7 de Março de 2013 13:25 Assunto: Re: [R-br] Retirar uma amostra de um data.frame levando toda informação s <- split(dados, dados$GRUPO) s$"5" <- s$"5"[sample(1:nrow(s$"5"), 6),] do.call('rbind', s) _______________________________________________ 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.

Boa tarde Pessoal! Preciso fazer um procedimento estatístico, no qual necessito que os grupos tenham o mesmo tamanho amostral, mas não posso perder as outras informações de cada amostra (outras variáveis). Por exemplo, nos dados abaixo, a variável GRUPO: o grupo 5 tem 18 amostras e o grupo 6 apenas 6 amostras. Gostaria de fazer um sorteio aleatório dentro do grupo 5, de tal forma a selecionar apenas 6 amostras destas, levando todas as informações junto das outas variáveis e assim, montando um subset. tentei programar algo, mas não sai muito do lugar....por isso nem postei nada de código! desde já, muito obrigada! Simone #================================================= # Os dados dados<- read.table('dados.txt', head=T) names(dados) grupo valor GRUPO 13 2340.0 5 13 62.0 5 13 102.0 5 13 854.0 5 13 492.0 5 13 133.0 5 14 2540.0 5 14 5140.0 5 14 1010.0 5 14 49999.0 5 14 71.4 5 14 5440.0 5 15 2360.0 5 15 439.0 5 15 79.0 5 15 3230.0 5 15 49999.0 5 15 675.0 5 16 49999.0 6 16 2610.0 6 16 455.0 6 16 954.0 6 16 5630.0 6 16 3890.0 6 #================================== ***---***---***---***---***---***---***---***---***---***---***---***---*** * Simone Daniela Sartorio * Professora Adjunta I da UFSCar, Centro de Ciências Agrárias, Campus Araras/SP. *Doutora e Mestre em Estatística e Experimentação Agronômica - ESALQ/USP; * Licenciada em Matemática - UNESP/Rio Claro. * Contatos: *tel: (19)3543-2614, ramal 2664 *cel: (19)8182-0586 - Tim ***---***---***---***---***---***---***---***---***---***---***---***---*** Tenha um bom dia! ;)
participantes (6)
-
Carlos pombo sonderblohm
-
Elias Teixeira Krainski
-
FHRB Toledo
-
Manoel Galdino
-
Simone D. Sartorio
-
Tiago Souza Marçal