Si tengo un vector comocontar números consecutivos en un vector
"a": 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0
Quiero saber cuántos son 1
juntos en a
, en este caso la respuesta sería 3 y 2.
Es Hay algún script que pueda hacer esto?
Si tengo un vector comocontar números consecutivos en un vector
"a": 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0
Quiero saber cuántos son 1
juntos en a
, en este caso la respuesta sería 3 y 2.
Es Hay algún script que pueda hacer esto?
Ver ?rle
.
## create example vector
a <- c(rep(0, 3), rep(1, 3), rep(0, 4), rep(1, 2), rep(0, 3))
## count continuous values
r <- rle(a)
## fetch continuous length for value 1
r$lengths[r$values == 1]
# [1] 3 2
¿No es 'values' y no' value'? La coincidencia parcial con '$' encuentra la información correcta, pero también 'rle (a) $ v' para llevarlo al extremo. – thelatemail
¿Qué le parece esto?
test <- c(0,0,0,1,1,1,0,0,0,0,1,1,0,0,0)
rle(test)$lengths[rle(test)$values==1]
#[1] 3 2
Para los datos masivos, puede acelerarlo un poco complicado el uso de algunos de selección:
diff(unique(cumsum(test == 1)[test != 1]))
#[1] 3 2
Otros han respondido a la pregunta. Me gustaría agregar dos observaciones:
Truco de entrada de datos: utilice el escaneo (predeterminado en la clase "numérico", sin necesidad de repeticiones o de coma) y también funciona para los caracteres separados por espacios en blanco si agrega "carácter" como un argumento.
a <- scan()
1: 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0
16:
Read 15 items
rle
es realmente la función inversa de rep
arle <- rle(a)
rep(arle$values, arle$lengths)
[1] 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0
Pensé que era la función inversa para reverse.rle;) – Dason
Bueno, supongo, pero ¿has mirado su código? –
que he visto al menos 3 preguntas en 2 días de personas que buscan 'rle' es una función oscuro, pero muy práctico. –