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