Isso já apareceu antes de eu ter certeza, mas não consigo encontrar o problema ou a postagem SO. Alguém lembra ou tem os links por favor? Parece que me lembro de responder a alguém algo como " .I
destina-se a ser usado em agrupamento de acordo com a documentação, mas seria bom estendê-lo para não agrupamento também". A página do manual ainda contém as palavras "durante o agrupamento" para .I
.
Comportamento atual na v1.10.4-3 e 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
>
Agora, which=TRUE
foi planejado e funciona para o primeiro caso (* 1):
> X["b", which=TRUE]
[1] 3
mas incluir os números das linhas de x dentro de j
( 2) não é atualmente possível, a menos que você adicione os números das linhas de x explicitamente como uma coluna primeiro. which=TRUE
já que meu palpite é que as pessoas buscam .I
primeiro.
Alguém lembra ou tem os links por favor?
Provavelmente o que você está procurando: https://stackoverflow.com/a/34755995/ e https://github.com/Rdatatable/data.table/issues/1494 Embora o título deva ser ".I in DT [i, .I] deve retornar números de linha de DT não de DT [i] "(sem o by), uma vez que já tem esse comportamento quando by = está presente ...?
Outra pergunta sobre .I e por = https://github.com/Rdatatable/data.table/issues/1206
Podemos usar .I para global, portanto, número de linha sem agrupamento, e .i para local, portanto, apenas dentro do agrupamento?
@dracodoc como mencionado por Frank, este é o # 1206
Desculpe, não percebi que existe um tópico inteiro sobre essa ideia! Isso significa que é uma boa ideia, certo?
exemplo 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
Comentários muito úteis
Desculpe, não percebi que existe um tópico inteiro sobre essa ideia! Isso significa que é uma boa ideia, certo?