primeros - suma de numeros consecutivos
Cuenta el nĂºmero de pares consecutivos en un vector (4)
Con data.table :
library(data.table)
dt <- rev(data.table(embed(V,2)))
dt[,.N, by=names(dt)]
# V2 V1 N
# 1: -1 -1 7
# 2: -1 1 1
# 3: 1 1 1
Supongamos que tengo el siguiente vector:
V<-c(-1,-1,-1,-1,-1,-1,-1,-1,1,1)
y quiero contar el número de pares CONSECUTIVOS en las siguientes categorías:
(1,1), (-1,1), (1,-1), and (-1,-1).
En mi ejemplo, hay siete pares consecutivos de (-1,-1)
, un par de (-1,1)
y 1 par de (1,1)
.
Estoy tratando de resolver este problema utilizando la función de división, pero no he podido averiguar los factores correctos.
La idea es emparejar la primera observación con la 2da. El 2º con el 3º y así sucesivamente. El último par debería ser la (n-1) ª observación con la enésima observación.
En la base R, agrega la mitad derecha del par a la diferencia para crear una puntuación:
V<-c(-1,-1,-1,-1,-1,-1,-1,-1,1,1)
table(diff(V) + V[-1])
#-1 1 3
# 7 1 1
Así es como se puntúa cada par:
(-1,-1) => (-1) - (-1) + (-1) = -1
(-1, 1) => ( 1) - (-1) + (1) = 3
( 1,-1) => (-1) - (1) + (-1) = -3
( 1, 1) => ( 1) - (1) + (1) = 1
Tal vez algo así
library(zoo)
table(rollapply(V, 2, toString))
# -1, -1 -1, 1 1, 1
# 7 1 1
O con base R
table(paste(head(V, -1), tail(V, -1)))
# -1 -1 -1 1 1 1
# 7 1 1
O según el comentario de @akruns, sin paste
table(head(V, -1), tail(V, -1))
# -1 1
# -1 7 1
# 1 0 1
O
as.data.frame(table(head(V, -1), tail(V, -1)))
# Var1 Var2 Freq
# 1 -1 -1 7
# 2 1 -1 0
# 3 -1 1 1
# 4 1 1 1
Todos los pares consecutivos pueden ser representados por dos vectores paralelos, omitiendo la última o la primera observación
x <- V[-length(V)]
y <- V[-1]
y luego la tabulación cruzada de estos
> xtabs(~ x + y)
y
x -1 1
-1 7 1
1 0 1
o en forma ligeramente diferente
> as.data.frame(xtabs(~x+y))
x y Freq
1 -1 -1 7
2 1 -1 0
3 -1 1 1
4 1 1 1