Data.table: Símbolo .I consistência quando não agrupado

Criado em 30 jan. 2018  ·  5Comentários  ·  Fonte: Rdatatable/data.table

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.

bug consistency

Comentários muito úteis

Desculpe, não percebi que existe um tópico inteiro sobre essa ideia! Isso significa que é uma boa ideia, certo?

Todos 5 comentários

Alguém lembra ou tem os links por favor?

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
Esta página foi útil?
0 / 5 - 0 avaliações