Esto ha surgido antes de que esté seguro, pero no puedo encontrar el problema o la publicación SO. Alguien recuerda o tiene los enlaces por favor? Me parece recordar haber respondido a alguien algo como " .I
está diseñado para usarse en agrupaciones según la documentación, pero sería bueno extenderlo también a no agrupaciones". La página de manual todavía contiene las palabras "al agrupar" para .I
.
Comportamiento actual tanto en v1.10.4-3 como en dev:
> X = data.table(c("a","a","b","c","c"), 10:14)
> setkey(X,V1)
> X["b"]
V1 V2
1: b 12 # ok
> X["b", .I]
[1] 1 # expected x's row number 3 (*1)
> X["b", .I, by=.EACHI]
V1 I
1: b 3 # ok
> X["b", .(.I,V2)]
I V2
1: 1 12 # expected x's row number 3 not 1 (*2)
> X["b", .(.I,V2), by=.EACHI]
V1 I V2
1: b 3 12 # ok
>
Ahora, which=TRUE
fue pensado y funciona para el primer caso (* 1):
> X["b", which=TRUE]
[1] 3
pero incluir los números de fila de x dentro de j
( 2) no es posible actualmente, a menos que primero agregue los números de fila de x explícitamente como una columna. which=TRUE
ya que supongo que la gente alcanza .I
primero.
Alguien recuerda o tiene los enlaces por favor?
Probablemente lo que está buscando: https://stackoverflow.com/a/34755995/ y https://github.com/Rdatatable/data.table/issues/1494 Aunque el título debería ser ".I en DT [i, .I] debería devolver números de fila de DT, no de DT [i] "(sin by) ya que ya tiene ese comportamiento cuando by = está presente ...?
Otra pregunta sobre .I y por = https://github.com/Rdatatable/data.table/issues/1206
¿Podemos usar .I para global, por lo tanto, número de fila sin agrupación, y .i para local, por lo tanto, solo dentro de la agrupación?
@dracodoc como lo menciona Frank este es el # 1206
¡Lo siento, no me di cuenta de que hay un hilo en esta idea! Eso significa que es una buena idea, ¿verdad?
ejemplo de https://github.com/Rdatatable/data.table/issues/539
dt <- data.table(a=sample(letters, 100, T), b=rnorm(100))
dt[ a=="c", list(.N, .I)]
N .I
1: 4 1
2: 4 2
3: 4 3
4: 4 4
dt[a=="c", list(.N, .I), by=a]
a N .I
1: c 4 54
2: c 4 67
3: c 4 71
4: c 4 86
Comentario más útil
¡Lo siento, no me di cuenta de que hay un hilo en esta idea! Eso significa que es una buena idea, ¿verdad?