[R-br] Seleção de plantas ( sorteio)
FHRB Toledo
fernandohtoledo em gmail.com
Sexta Maio 24 15:34:36 BRT 2013
Helio,
Uma sugestão para seu problema...
dados <- data.frame(ponto = c(rep(3001,6),rep(3002,6),rep(3003,6)),
planta = c(rep(seq(1:6),3)),
valor = seq(1.5,10,.5))
dados.sub <- split(dados, dados$planta)
amostrador <- function(x, tamanho) x[sample(1:nrow(x), tamanho, replace =
FALSE), ]
dados2 <- do.call(rbind, lapply(dados.sub, amostrador, tamanho = 2))
dados3 <- do.call(rbind, lapply(dados.sub, amostrador, tamanho = 3))
dados4 <- do.call(rbind, lapply(dados.sub, amostrador, tamanho = 4))
##...
Vale lembrar que pela implementação a amostragem das linhas é sem
reposição, para alterar tal comportamento use o replace = TRUE!
att,
FH
2013/5/24 Rodrigo Coster <rcoster em gmail.com>
> Helio, dai temos varias possiveis soluções.. ou sortear as 2 colunas no
> fim:
>
> do.call(rbind, by(dados, dados[,1], function(x, ...) x[sample(1:nrow(x),
> ...), ], size=1))[,c(1:2, sample(3:4, 1))]
>
> Ou mexer na função dentro do apply e fazer o sorteio para cada ponto:
>
> do.call(rbind, by(dados, dados[,1], function(x, ...) { z <-
> x[sample(1:nrow(x), ...), c(1:2, sample(3:4, 1))] ; colnames(z) <-
> c('ponto', 'planta', 'valor') ; z } , size=1))
>
>
> 2013/5/24 Hélio Gallo Rocha <heliogallorocha em gmail.com>
>
>> Mandei exemplo em que dobrou o numero de plantas, esse seria o exemplo
>> correto:
>>
>> ponto=c(rep(3001,6),rep(3002,6),rep(3003,6));ponto ;length(ponto)
>> planta=c(rep(seq(1:6),3));planta ;length(planta)
>> valor1=seq(1.25,10,.5);valor1;length(valor1)
>> valor2=seq(10,1.25,-.5);valor2;length(valor2)
>> dados=cbind(ponto,planta,valor1,valor2);dados
>>
>>
>> Grato
>>
>> Hélio
>>
>>
>> Em 24 de maio de 2013 09:20, Hélio Gallo Rocha <heliogallorocha em gmail.com
>> > escreveu:
>>
>> Rodrigo, fiquei em outra situação.
>>>
>>> A função envida funciona, mas se tiver mais uma variável como este
>>> exemplo:
>>> ponto=c(rep(3001,12),rep(3002,12),rep(3003,12))
>>> planta=c(rep(seq(1:6),6))
>>> valor1=seq(1.25,10,.25)
>>> valor2=seq(10,1.25,-.25)
>>> ramo1=c(rep("A",36))
>>> ramo2=c(rep("B",36))
>>> dados=cbind(ponto,planta,valor1,valor2);dados
>>>
>>> ponto planta valor1 valor2
>>> [1,] 3001 1 1.25 10.00
>>> [2,] 3001 2 1.50 9.75
>>> [3,] 3001 3 1.75 9.50
>>> [4,] 3001 4 2.00 9.25
>>> [5,] 3001 5 2.25 9.00
>>> [6,] 3001 6 2.50 8.75
>>> [7,] 3001 1 2.75 8.50
>>> [8,] 3001 2 3.00 8.25
>>> [9,] 3001 3 3.25 8.00
>>> [10,] 3001 4 3.50 7.75
>>> [11,] 3001 5 3.75 7.50
>>> [12,] 3001 6 4.00 7.25
>>> [13,] 3002 1 4.25 7.00
>>> [14,] 3002 2 4.50 6.75
>>> [15,] 3002 3 4.75 6.50
>>> [16,] 3002 4 5.00 6.25
>>> [17,] 3002 5 5.25 6.00
>>> [18,] 3002 6 5.50 5.75
>>> [19,] 3002 1 5.75 5.50
>>> [20,] 3002 2 6.00 5.25
>>> [21,] 3002 3 6.25 5.00
>>> [22,] 3002 4 6.50 4.75
>>> [23,] 3002 5 6.75 4.50
>>> [24,] 3002 6 7.00 4.25
>>> [25,] 3003 1 7.25 4.00
>>> [26,] 3003 2 7.50 3.75
>>> [27,] 3003 3 7.75 3.50
>>> [28,] 3003 4 8.00 3.25
>>> [29,] 3003 5 8.25 3.00
>>> [30,] 3003 6 8.50 2.75
>>> [31,] 3003 1 8.75 2.50
>>> [32,] 3003 2 9.00 2.25
>>> [33,] 3003 3 9.25 2.00
>>> [34,] 3003 4 9.50 1.75
>>> [35,] 3003 5 9.75 1.50
>>> [36,] 3003 6 10.00 1.25
>>>
>>> do.call(rbind, by(dados, dados[,1], function(x, ...) x[sample(1:nrow(x),
>>> ...), ], size=1))
>>> ponto planta valor1 valor2
>>> 3001 3 1.75 9.50
>>> 3002 5 6.75 4.50
>>> 3003 4 9.50 1.75
>>>
>>> No caso seria sortear apenas um valor.
>>>
>>> A função que enviou resolve se as colunas valor 1 e valor 2 estiverem
>>> uma debaixo da outra, no exemplo seriam 72 linhas.
>>>
>>> Se tiver solução, seria mais fácil,
>>>
>>> Obrigado,
>>> Hélio
>>>
>>>
>>> Em 23 de maio de 2013 21:39, Rodrigo Coster [via R-br] <
>>> ml-node+s2285057n4659434h22 em n4.nabble.com> escreveu:
>>>
>>>> Ops, é sortear plantas dentro de ponto, nao ponto dentro de plantas.
>>>> Troca o dados[,2] por dados[,1]
>>>>
>>>> do.call(rbind, by(dados, dados[,1], function(x, ...)
>>>> x[sample(1:nrow(x), ...), ], size=1))
>>>>
>>>>
>>>>
>>>> 2013/5/23 Rodrigo Coster <[hidden email]<http://user/SendEmail.jtp?type=node&node=4659434&i=0>
>>>> >
>>>>
>>>> Da para fazer com do.call() e by():
>>>>>
>>>>> do.call(rbind, by(dados, dados[,2], function(x, ...)
>>>>> x[sample(1:nrow(x), ...), ], size=1))
>>>>>
>>>>> Depois é só ir mudando o parametro size para outros tamanhos... e se
>>>>> quiser amostragem com reposição, adicionar o replace=TRUE depois do size.
>>>>>
>>>>>
>>>>> 2013/5/23 Hélio Gallo Rocha <[hidden email]<http://user/SendEmail.jtp?type=node&node=4659434&i=1>
>>>>> >
>>>>>
>>>>>> Caros da Lista
>>>>>>
>>>>>> Com os dados hipotéticos abaixo:
>>>>>>
>>>>>> ponto=c(rep(3001,6),rep(3002,6),rep(3003,6))
>>>>>> planta=c(rep(seq(1:6),3))
>>>>>> valor=seq(1.5,10,.5)
>>>>>> dados=cbind(ponto,planta,valor);dados
>>>>>>
>>>>>> ponto planta valor
>>>>>> [1,] 3001 1 1.5
>>>>>> [2,] 3001 2 2.0
>>>>>> [3,] 3001 3 2.5
>>>>>> [4,] 3001 4 3.0
>>>>>> [5,] 3001 5 3.5
>>>>>> [6,] 3001 6 4.0
>>>>>> [7,] 3002 1 4.5
>>>>>> [8,] 3002 2 5.0
>>>>>> [9,] 3002 3 5.5
>>>>>> [10,] 3002 4 6.0
>>>>>> [11,] 3002 5 6.5
>>>>>> [12,] 3002 6 7.0
>>>>>> [13,] 3003 1 7.5
>>>>>> [14,] 3003 2 8.0
>>>>>> [15,] 3003 3 8.5
>>>>>> [16,] 3003 4 9.0
>>>>>> [17,] 3003 5 9.5
>>>>>> [18,] 3003 6 10.0
>>>>>>
>>>>>> então temos 3 pontos ( 3001, 3002, 3003)
>>>>>> seis plantas em cada ponto ( 1,2,3,4,5,,6)
>>>>>>
>>>>>> Já tentei usar sample, mas sorteia aleatoriamente
>>>>>>
>>>>>> Preciso que seja sorteada uma planta de cada ponto, depois vou
>>>>>> sortear duas plantas de cada ponto, e assim sucessivamente
>>>>>>
>>>>>> Agradeço desde já
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Hélio Gallo Rocha
>>>>>> IFSULDEMINAS - Câmpus Muzambinho
>>>>>>
>>>>>> _______________________________________________
>>>>>> R-br mailing list
>>>>>> [hidden email] <http://user/SendEmail.jtp?type=node&node=4659434&i=2>
>>>>>> 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
>>>> [hidden email] <http://user/SendEmail.jtp?type=node&node=4659434&i=3>
>>>> 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.
>>>>
>>>> ------------------------------
>>>> If you reply to this email, your message will be added to the
>>>> discussion below:
>>>>
>>>> http://r-br.2285057.n4.nabble.com/R-br-Selecao-de-plantas-sorteio-tp4659435p4659434.html
>>>> To unsubscribe from R-br, click here<http://r-br.2285057.n4.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=3357982&code=aGVsaW9nYWxsb3JvY2hhQGdtYWlsLmNvbXwzMzU3OTgyfC0xMzQ3NTkwMDY4>
>>>> .
>>>> NAML<http://r-br.2285057.n4.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>>>>
>>>
>>>
>>>
>>> --
>>> Hélio Gallo Rocha
>>> IFSULDEMINAS - Câmpus Muzambinho
>>>
>>
>>
>>
>> --
>> Hélio Gallo Rocha
>> IFSULDEMINAS - Câmpus Muzambinho
>>
>> _______________________________________________
>> 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.
>>
>
>
> _______________________________________________
> 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/20130524/ffef2ada/attachment.html>
Mais detalhes sobre a lista de discussão R-br