[R-br] Função usando sample

Robert Iquiapaza rbali em ufmg.br
Terça Maio 20 19:29:12 BRT 2014


Alexandre,

Pela descrição sua também acho que a resposta é essa. A solução do Benilton produz os mesmos resultados fazendo uma pequena alteração.
Sds

###

dados$nobs=1:length(dados$ab) #só pra conferir
str(dados$ab)  # na verdade vc não tem 15 níveis, só 5 com casos
dados$abf=factor(dados$ab) # eliminar níveis não usados
nopar=table(dados$abf) # casos por fator
nopara=cumsum(nopar) # acumular casos
tam=40  #amostra
set.seed(765)
seqs=sort(sample(1:nopara[1],tam)) # o sort só ordena
for(i in 2:length(nopara))seqs=c(seqs,sort(sample((nopara[i-1]+1):nopara[i],tam)))
res1= dados[seqs,]

set.seed(765)
res2 = do.call(rbind, lapply(split(dados, dados$abf), function(x) x[sample(nrow(x), tam),]))

res2o=res2[ order(res2$nobs), ]
res2o==res1 #iguais

###

From: ASANTOS 
Sent: Tuesday, May 20, 2014 4:27 PM
To: r-br em listas.c3sl.ufpr.br 
Subject: Re: [R-br] Função usando sample

Obrigado Benilton,

        Mas no caso de meus dados reais não posso usar:



res = do.call(rbind, lapply(split(dados, dados$n.talhao), function(x) x[sample(nrow(x), 20),]))


Pois eu tenho n.talhao com os mesmos números, mas diferentes proj.talhao, o que constitui uma área diferente, cada um, mas a associação de n.talhao e proj.talhao é que caracterizam verdadeiramente áreas diferentes, sendo:

dados$ab<- interaction(dados$proj.talhao, dados$n.talhao)

mas quando aplico sua função sobre o objeto dados$ab, tenho o erro:

d, lapply(split(dados, dados$ab), function(x) x[sample(nrow(x), 40),]))
Erro em sample.int(length(x), size, replace, prob) : 
  impossível tomar uma amostra maior que a população quando 'replace = FALSE'


CRM:

##
proj.talhao<-sort(rep(c("tamandua","itapagi","corrego"),100))
n.talhao<-sort(rep(c("144","256","356","144","301","180"),50))
dados<-as.data.frame(cbind(proj.talhao,n.talhao))
dados$medida1<-rnorm(nrow(dados),300)
dados$medida2<-rnorm(nrow(dados),300)
dados$medida3<-rnorm(nrow(dados),300)
dados$ab<- interaction(dados$proj.talhao, dados$n.talhao)
head(dados)
##




Em 20/05/2014 15:04, Benilton Carvalho escreveu:

  a funcao q passei faz exatamente o que vc descreve... entretanto, o seu conjunto de dados de exemplo nao parece adequado para o problema q vc quer resolver. benilton



  Em 20 de maio de 2014 15:08, ASANTOS <alexandresantosbr em yahoo.com.br> escreveu:

    Obrigado Robert e Benilton,


                  Mas na verdade ainda não resolveu, vou tentar explicar de outro modo, tenho 15 áreas hipotéticas (str (dados$ab)), sendo: 




    proj.talhao<-sort(rep(c("tamandua","itapagi","corrego"),100))
    n.talhao<-sort(rep(c("144","256","356","144","301","180"),50))
    dados<-as.data.frame(cbind(proj.talhao,n.talhao))
    dados$medida1<-rnorm(nrow(dados),300)
    dados$medida2<-rnorm(nrow(dados),300)
    dados$medida3<-rnorm(nrow(dados),300)
    dados$ab<- interaction(dados$proj.talhao, dados$n.talhao)
    head(dados)
    ##



    Porém para uma mesma variável resposta tenho vetores de tamanhos diferentes e quero compará-los, gostaria de sortear ao acaso um mesmo número de dados das 15 áreas (por exemplo 40 dados) para fazer as análises e não ter problemas com desbalanceamento, para tanto preciso de uma função do tipo a cada modificação em dados$ab realizar a função sample (nomesdasáreas, 40),


    Obrigado



    Em 20/05/2014 11:02, Robert Iquiapaza escreveu: 


      Será disso que vc precisa?
      ##
      str(dados$ab)
      dados$nobs=1:length(dados$ab) #só pra conferir
      nopar=table(dados$ab)
      nopar=nopar[nopar!=0]
      nopara=cumsum(nopar)
      seqs=sort(sample(1:nopara[1],20)) #i=4
      for(i in 2:length(nopara))seqs=c(seqs,sort(sample((nopara[i-1]+1):nopara[i],20)))
      seqs
      length(seqs)
      dados[seqs,]

      ###
      Sds
      Robert


      Em 20 de maio de 2014 11:23, ASANTOS <alexandresantosbr em yahoo.com.br> escreveu:

        Boa tarde Pessoal,

               Ainda não consegui solucionar meu problema usando uma função com
        sample:

        Tenho os seguintes dados artificiais:

        #
        set.seed(765)

        proj.talhao<-sort(rep(c("tamandua","itapagi","corrego"),100))
        n.talhao<-sort(rep(c("144","256","356","144","301","180"),50))
        dados<-as.data.frame(cbind(proj.talhao,n.talhao))
        dados$medida1<-rnorm(nrow(dados),300)
        dados$medida2<-rnorm(nrow(dados),300)
        dados$medida3<-rnorm(nrow(dados),300)
        dados$ab<- interaction(dados$proj.talhao, dados$n.talhao)
        head(dados)
        ##


        E gostaria que a cada alteração em cada área umas das 5 áreas do objeto
        dados$ab fossem amostradas 20 linhas e o resultado fosse armazenado como:

        proj.talhao n.talhao  medida1  medida2  medida3          ab
        1     corrego      144 299.8956 300.5377 300.7281 corrego.144
        2     corrego      144 300.7179 298.9645 301.9793 corrego.144
        3     corrego      144 300.5074 302.8484 298.4562 corrego.144

        Onde tenho somente as linhas sorteadas com todos os identificadores
        originais,

        Obrigado,

        --
        ======================================================================
        Alexandre dos Santos
        Proteção Florestal
        IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso
        Campus Cáceres
        Caixa Postal 244
        Avenida dos Ramires, s/n
        Bairro: Distrito Industrial
        Cáceres - MT                      CEP: 78.200-000
        Fone: (+55) 65 8132-8112 (TIM)   (+55) 65 9686-6970 (VIVO)
        mailto:e-mails%3Aalexandresantosbr em yahoo.com.br
                 alexandre.santos em cas.ifmt.edu.br
        Lattes: http://lattes.cnpq.br/1360403201088680
        =====================================================================


    -- 
    ======================================================================
    Alexandre dos Santos
    Proteção Florestal
    IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso
    Campus Cáceres
    Caixa Postal 244
    Avenida dos Ramires, s/n
    Bairro: Distrito Industrial
    Cáceres - MT                      CEP: 78.200-000
    Fone: (+55) 65 8132-8112 (TIM)   (+55) 65 9686-6970 (VIVO)
    mailto:e-mails%3Aalexandresantosbr em yahoo.com.br
            alexandre.santos em cas.ifmt.edu.br
    Lattes: http://lattes.cnpq.br/1360403201088680

    ====================================================================== 


    _______________________________________________
    R-br mailing list
    R-br em 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.





  -- 

          
         Benilton Carvalho
        about.me/benilton 
          


   

_______________________________________________
R-br mailing list
R-br em 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.

-- 
======================================================================
Alexandre dos Santos
Proteção Florestal 
IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso
Campus Cáceres
Caixa Postal 244
Avenida dos Ramires, s/n
Bairro: Distrito Industrial 
Cáceres - MT                      CEP: 78.200-000
Fone: (+55) 65 8132-8112 (TIM)   (+55) 65 9686-6970 (VIVO)
e-mails:alexandresantosbr em yahoo.com.br 
        alexandre.santos em cas.ifmt.edu.br 
Lattes: http://lattes.cnpq.br/1360403201088680                   
======================================================================


--------------------------------------------------------------------------------
_______________________________________________
R-br mailing list
R-br em 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.
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20140520/4e5bf1cf/attachment.html>


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