[R-br] Contagem de sequencias baseado no tamanho da cadeia

Fernando Gama f.fabiogama88 em gmail.com
Domingo Maio 15 12:13:40 BRT 2016


Obrigado Eder, vou testar sua solucao.. =)

Em 15 de maio de 2016 11:58, Éder Comunello <comunello.eder em gmail.com>
escreveu:

> Senhores, bom dia!
>
> Segue uma ideia...
>
> ### <code r
>
> individuo
> <-list(c(8,9,6,0,8,7,8,0,9,2,6,6,0,7,8,2,8,1,3,6,3,2,3,2,0,6,3,3,8,7))
> individuo[[1]]
>
> # Pra contar o número de sequências me pareceu mais fácil...
> res <- data.frame(unclass(rle(individuo[[1]]<4))); res
> sum(res$len[res$values==T]%/%2) # 4
>
> # Pra apresentar as sequências, ainda é possível melhorar...
> pos <- NULL
> for (i in 1:nrow(res)) {
>      if (res$values[i]) tmp=rep(1:2,len=res$lengths[i])
>      else tmp=rep(0, len=res$lengths[i])
>      pos <- c(pos, tmp)
> }
>
> pos2 <- NULL
> for (i in which(pos==2)) {tmp <- c(i-1, i); pos2 <- c(pos2, tmp)}
> individuo[[1]][pos2] # [1] 1 3 3 2 3 2 3 3
>
> ### </code>
>
>> ================================================
> Éder Comunello
> Agronomist (UEM), MSc in Environ. Sciences (UEM)
> DSc in Agricultural Systems Engineering (USP/Esalq)
> Brazilian Agricultural Research Corporation (Embrapa)
> Dourados, MS, Brazil |<O>|
> ================================================
> GEO, -22.2752, -54.8182, 408m
> UTC-04:00 / DST: UTC-03:00
>
>
>
>
> Em 14 de maio de 2016 16:10, Fernando Gama <f.fabiogama88 em gmail.com>
> escreveu:
>
>> Oi Augusto obrigado por responder.,
>>
>> Correção quando escrevi: Ai ficaria assim:   [​8 9 6* 0* 8 7 8 *0* 9 *2* 6
>> 6 *0* 7 8 *2 *8 *1 3* 6 *3 2* *3 * *2* *0* 6 *3 3* 8 7​]*
>>
>> o output ficaria assim: [​*0* *0* *2* *0* *2* *1 3* *3 2* *3* *2* *0* *3
>> 3* ​] o retorno da sua função exemplo está correto Augusto, porém
>> perdemos a referência de contagem.
>>
>> Eu só posso fazer a contagem do tamanho da cadeia quando vierem *em
>> sequencia (marquei com underline ai em cima)*. Nesse caso, como o
>> tamanho da cadeia = 2, Então eu irei contar da seguinte forma:
>>
>> Em suma:
>> Frequencia da cadeia = [3 3] + [2 0] + [2 3] + [1 3] = 4.
>>
>> Gostaria de ter esse retorno na função: Total=*4*.
>>
>> Obrigado.
>>
>> Em 14 de maio de 2016 16:03, Augusto Ribas <ribas.aca em gmail.com>
>> escreveu:
>>
>>> Eu não entendi muito bem o problema, mas daria para definir uma função,
>>> e usar ela no lapply para toda a sua lista.
>>> Veja se esse exemplo ajuda.
>>>
>>> ###Gerando dados de exemplo
>>> set.seed(123)
>>> lista<-list()
>>> j<-1
>>> for(i in sample(1:10,20,replace=T)){
>>>     lista[[j]]<-sample(1:10,i,replace=T)
>>>     j<-j+1
>>> }
>>> ###O exemplo
>>> lista
>>>
>>> ###Faça uma função que retorna o que você quer
>>> funcao<-function(x){
>>>     if(length(x)>2 && sum(x<4)>=1){
>>>         return(x[x<4])
>>>     }else{
>>>         return(NA)
>>>     }
>>> }
>>>
>>> ###Exemplo de uso
>>> funcao(lista[[1]])
>>> funcao(lista[[2]])
>>>
>>> ###Para uma lista, da para usar lapply
>>> lapply(lista,funcao)
>>>
>>> Em 14 de maio de 2016 14:35, Fernando Gama <f.fabiogama88 em gmail.com>
>>> escreveu:
>>>
>>>> Eu tenho uma lista com os seguintes numeros:
>>>>
>>>> individuo[[1]]= [​8 9 6 0 8 7 8 0 9 2 6 6 0 7 8 2 8 1 3 6 3 2 3 2 0 6 3
>>>> 3 8 7​]
>>>>
>>>> Gostaria de detectar (realizar a contagem de sequencias dada um tamanho
>>>> de cadeia).
>>>> Baseado nos seguintes filtros:
>>>>
>>>> 1) tamanho da cadeia = 2
>>>> 2) pegar somente os valores iguais ou abaixo de 4
>>>>
>>>> Ai ficaria assim:   [​8 9 6* 0* 8 7 8 *0* 9 *2* 6 6 *0* 7 8 *2 *8 *1 3*
>>>> 6 *3 2* *3* *2* *0* 6 *3 3* 8 7​]
>>>>
>>>> Tentei fazer começar com o which() para pegar as posicoes em sequencia:
>>>> which(individuo[[1]]<=4)  e com rle(individuo[[1]]), este ultimo só
>>>> funciona para sequencias de numeros iguais.
>>>>
>>>> ​Porém, ainda nao encontrei uma maneira de detectar sequencias baseados
>>>> no tamanho da cadeia. Como setei lá em cima(tamanho da cadeia = 2), então o
>>>> output seria essas 4 sequencias:
>>>> [*1  3*  *3  2 * *3  2*  *3  3*]. Teria portanto, 8 numeros com 4
>>>> sequencias.
>>>>
>>>> Alguem pode ajudar? :/
>>>>
>>>>
>>>>>>>>
>>>>
>>>> --
>>>> Att,
>>>> ​Fernando.​
>>>>
>>>>
>>>> _______________________________________________
>>>> 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.
>>>>
>>>
>>>
>>>
>>> --
>>> Grato
>>> Augusto C. A. Ribas
>>>
>>> Site Pessoal: http://recologia.com.br/
>>> <http://augustoribas.heliohost.org>
>>> Github: https://github.com/Squiercg
>>> Lattes: http://lattes.cnpq.br/7355685961127056
>>>
>>> _______________________________________________
>>> 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.
>>>
>>
>>
>>
>> --
>> Att,
>>
>> Fernando Gama da Mata
>>
>>
>> _______________________________________________
>> 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.
>



-- 
Att,

Fernando Gama da Mata

Vale of Institute Technology
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20160515/f45e2f59/attachment.html>


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