sacar - Cuente el número de registros y genere el número de fila dentro de cada grupo en una tabla de datos.
que es un periodo en la tabla periodica (1)
Utilizando .N
...
DT[ , `:=`( COUNT = .N , IDX = 1:.N ) , by = VAL ]
# VAL COUNT IDX
# 1: 1 3 1
# 2: 2 4 1
# 3: 2 4 2
# 4: 3 3 1
# 5: 1 3 2
# 6: 3 3 2
# 7: 3 3 3
# 8: 2 4 3
# 9: 2 4 4
#10: 1 3 3
.N
es el número de registros en cada grupo, con grupos definidos por "VAL"
.
Tengo los siguientes datos.
set.seed(1)
DT <- data.table(VAL = sample(c(1, 2, 3), 10, replace = TRUE))
VAL
1: 1
2: 2
3: 2
4: 3
5: 1
6: 3
7: 3
8: 2
9: 2
10: 1
Dentro de cada número en VAL
quiero:
- Cuente el número de registros / filas
- Cree un índice de fila (contador) de primera, segunda, tercera aparición, etc.
Al final quiero el resultado.
VAL COUNT IDX
1: 1 3 1
2: 2 4 1
3: 2 4 2
4: 3 3 1
5: 1 3 2
6: 3 3 2
7: 3 3 3
8: 2 4 3
9: 2 4 4
10: 1 3 3
donde "COUNT" es el número de registros / filas para cada "VAL", e "IDX" es el índice de fila dentro de cada "VAL".
Intenté trabajar con which
y length
usando .I
:
dt[, list(COUNT = length(VAL == VAL[.I]),
IDX = which(which(VAL == VAL[.I]) == .I))]
pero esto no funciona como .I
refiere a un vector con el índice, así que supongo que uno debe usar .I[]
. Aunque dentro de .I[]
otra vez enfrento el problema, no tengo el índice de filas y sí sé (por leer las data.table
frecuentes de la data.table
y seguir las publicaciones aquí) que se debe evitar el bucle a través de las filas si es posible.
Entonces, ¿cuál es la forma data.table
?