Contagem de sequencias baseado no tamanho da cadeia

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.

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@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@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

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@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@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@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@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

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@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@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@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@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@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@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.

Obrigado Eder, vou testar sua solucao.. =) Em 15 de maio de 2016 11:58, Éder Comunello <comunello.eder@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@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@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@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@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@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@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.
-- Att, Fernando Gama da Mata Vale of Institute Technology
participantes (3)
-
Augusto Ribas
-
Fernando Gama
-
Éder Comunello