Re: [R-br] Função usando sample

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@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) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 =====================================================================

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@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) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@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) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 ======================================================================

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@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@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) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@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) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 ======================================================================
_______________________________________________ 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.
-- [image: Benilton Carvalho on about.me] Benilton Carvalho about.me/benilton <http://about.me/benilton>

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@yahoo.com.br <mailto:alexandresantosbr@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@yahoo.com.br <mailto:alexandresantosbr@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 <tel:%28%2B55%29%2065%208132-8112> (TIM) (+55) 65 9686-6970 <tel:%28%2B55%29%2065%209686-6970> (VIVO) e-mails:alexandresantosbr@yahoo.com.br <mailto:e-mails%3Aalexandresantosbr@yahoo.com.br> alexandre.santos@cas.ifmt.edu.br <mailto:alexandre.santos@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 <tel:%28%2B55%29%2065%208132-8112> (TIM) (+55) 65 9686-6970 <tel:%28%2B55%29%2065%209686-6970> (VIVO) e-mails:alexandresantosbr@yahoo.com.br <mailto:e-mails%3Aalexandresantosbr@yahoo.com.br> alexandre.santos@cas.ifmt.edu.br <mailto:alexandre.santos@cas.ifmt.edu.br> Lattes: http://lattes.cnpq.br/1360403201088680 ======================================================================
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br <mailto: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.
-- Benilton Carvalho on about.me
Benilton Carvalho about.me/benilton
_______________________________________________ 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.
-- ====================================================================== 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@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 ======================================================================
participantes (3)
-
ASANTOS
-
Benilton Carvalho
-
Robert Iquiapaza