Foro de debate

Obtener sumas consecutivas dentro de un mismo vector??

 
Picture of Paulina Ponce Philimon
Obtener sumas consecutivas dentro de un mismo vector??
by Paulina Ponce Philimon - Thursday, 25 May 2017, 5:08 PM
 

Estaría muy agradecida si alguien puede ayudarme con una gran traba. 

Poseo un vector compuesto de 0 y 1 , de una longitud de 365. Dentro de este vector existen consecuciones de 1 (unos) que necesito sumar de forma independientes al estar separados por 0. 

Les pondré un ejemplo para ilustrar mejor el problema: 

> x 

[1] 110000111111000111111111111011111111 

Quiero obtener los valores resultantes de la suma de 1 entre los 0, por ejemplo: 

>x2

2   6  12   8   

Destaco que no me sirve buscarlos por posición porque son 83 vectores diferentes. 


Saludos. 

Picture of Manuel Muñoz Márquez
Re: Obtener sumas consecutivas dentro de un mismo vector??
by Manuel Muñoz Márquez - Friday, 26 May 2017, 5:59 PM
 

Hola:

En el ejemplo que pones, x parece una cadena de caracteres. ¿Es así como tienes los datos? ¿O se trata de un vector de ceros y unos?

La solución será distinta en ambas situaciones.

Un saludo.

Picture of Paulina Ponce Philimon
Re: Obtener sumas consecutivas dentro de un mismo vector??
by Paulina Ponce Philimon - Saturday, 27 May 2017, 3:18 AM
 

Tiene razón, creo que es una cadena de caracteres. Igual me gustaría saber la solución para ambas situaciones si es posible. 

Espero la respuesta, muchas gracias. 

Y perdón si no me expreso bien, he aprendido de forma autodidacta y por ensayo y error. 

Picture of Franz Jimeno
Re: Obtener sumas consecutivas dentro de un mismo vector??
by Franz Jimeno - Saturday, 27 May 2017, 8:18 AM
 

Hola,

aquí tienes el código con el que he conseguido lo que quieres.


#----------------------SNIP---------------------

vector <- c(1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1)

#Si se trata de un string, habrá que convertirlo en un vector con la siguiente funcion (no es mi caso)

#vector <- as.numeric(unlist(strsplit(vector, "")))


#Con las siguientes lineas le asignamos un número consecutivo a cada grupo de números iguales

counter <- 1

vector2 <- sapply(1:(length(vector)-1),

       function(x) {

         #Comprueba si el siguiente valor es diferente al actual, en caso afirmativo añade 1 al contador.

         if(vector[x]!=vector[x+1]){

           counter <<- counter+1

           } else {

             counter

           }

         }

       )


#Le añadimos un 1 al vector2, ya que en la funcion anterior no se tiene en cuenta

vector2 <- c(1,vector2)

#Te muestro 2 opciones

#OPCION 1

#La siguiente tabla nos devuelve el tamaño de cada grupo del vector2

tabla <- table(vector2)


#Si el vector comienza por 1, nos quedamos con los impares, si comenzara por 0, con los pares (tendríamos que cambiar el '==' por un '!=')

resultado <- as.vector(tabla[1:length(tabla)%%2==1])


#OPCION 2 (solo funciona para contar los de valor 1)

DF <- data.frame(vector, vector2)

#Se genera un data.frame con los valores en la columna 'vector'

grupos <- aggregate(vector ~vector2, DF, sum)

#Podemos filtrar por los valores mayores que cero y nos quedamos con la columna "vector"

resultado <- grupos[grupos$vector>0, "vector"] 

#----------------------SNIP---------------------


Espero que te valga.


Un saludo,

Franz

Picture of Paulina Ponce Philimon
Re: Obtener sumas consecutivas dentro de un mismo vector??
by Paulina Ponce Philimon - Sunday, 28 May 2017, 4:21 PM
 

Muchísimas gracias! Me ha funcionado perfectamente. 

En la parte del reemplazo (el '==' por un '!=') he agregado una condición, y ha ejecutado lo que necesitaba de forma automática. 

Gracias nuevamente, salvaste mi día. 

Saludos.