Foro de debate

Obtener sumas consecutivas dentro de un mismo vector??

Obtener sumas consecutivas dentro de un mismo vector??

by Paulina Ponce Philimon -
Number of replies: 4

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. 

In reply to Paulina Ponce Philimon

Re: Obtener sumas consecutivas dentro de un mismo vector??

by Manuel Muñoz Márquez -

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.

In reply to Manuel Muñoz Márquez

Re: Obtener sumas consecutivas dentro de un mismo vector??

by Paulina Ponce Philimon -

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. 

In reply to Paulina Ponce Philimon

Re: Obtener sumas consecutivas dentro de un mismo vector??

by Franz Jimeno -

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

In reply to Franz Jimeno

Re: Obtener sumas consecutivas dentro de un mismo vector??

by Paulina Ponce Philimon -

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.