Foro de debate

Suma de valores

 
Imagen de Fernando Seijas
Suma de valores
de Fernando Seijas - viernes, 24 de noviembre de 2017, 20:22
 

Hola, tengo una duda:

Si tengo un vector, como x <- c(0,0,0,0,1,2,0,1,5,1,2,2,0,0,0,4,0...)

Como puedo sumar los valores comprendidos entre ceros por separado para vectores muy grandes?

Por ejemplo,

si x <- c(0,0,0,0,1,2,0,1,5,1,2,2,0,0,7,4,0....) 

que el vector resultante sea

suma <-  c(1+2, 1+5+1+2+2,7+ 4...)

gracias!

Imagen de Manuel Muñoz Márquez
Re: Suma de valores
de Manuel Muñoz Márquez - sábado, 25 de noviembre de 2017, 08:55
 

Buenas:

Si lo que te interesa son las cantidades, entonces creo que te vale lo siguiente:

> x <- c(0,0,0,0,1,2,0,1,5,1,2,2,0,0,7,4,0)
> cs <- cumsum(x)
> diff(unique(cs[duplicated(cs)]))
[1]  3 11 11

Un saludo.

Imagen de Antonio Jesús Arriaza Gómez
Re: Suma de valores
de Antonio Jesús Arriaza Gómez - sábado, 25 de noviembre de 2017, 13:11
 

Seguramente no sea lo más eficiente... pero creo que esto te puede ayudar:

#########################################################

x = c(0,1,2,3,0,0,2,6,0,0,6,0,0,3,0,0,2,3,4,0,1)

n = length(x)

indices = which(x==0)

l = length(indices)

temp = rep(0,l)

for(i in seq(1,l-1)){

temp[i] = sum(x[indices[i]:indices[i+1]])

}

if(indices[l]<n){

  temp[l]=sum(x[indices[l]:n])

}

if(indices[1]>1){

  temp=c(sum(x[1:indices[1]]),temp)

}

solucion = temp[temp!=0]

print(solucion)

#########################################################

Imagen de Antonio Jesús Arriaza Gómez
Re: Suma de valores
de Antonio Jesús Arriaza Gómez - sábado, 25 de noviembre de 2017, 13:12
 

Ni lo mires, la solución de Manuel es mejor.