Data.table: Symbol .I Konsistenz, wenn nicht gruppiert

Erstellt am 30. Jan. 2018  ·  5Kommentare  ·  Quelle: Rdatatable/data.table

Dies ist aufgetaucht, bevor ich mir sicher bin, aber ich kann das Problem oder den SO-Beitrag nicht finden. Kann sich jemand erinnern oder haben die Links bitte? Ich erinnere mich an eine Antwort an jemanden wie " .I ist für die Gruppierung gemäß Dokumentation vorgesehen, aber es wäre gut, sie auch auf Nicht-Gruppierung auszudehnen". Die Manpage enthält weiterhin die Wörter "während der Gruppierung" für .I .

Aktuelles Verhalten in v1.10.4-3 und 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
> 

Nun war which=TRUE vorgesehen und funktioniert für den ersten Fall (* 1):

> X["b", which=TRUE]
[1] 3

Das Einfügen der Zeilennummern von x in j ( 2) ist derzeit jedoch nicht möglich, es sei denn, Sie fügen die Zeilennummern von x explizit zuerst als Spalte hinzu. tut, und vielleicht sogar das Argument which=TRUE langsam ablehnen würde, da ich vermute, dass die Leute nach .I greifen

bug consistency

Hilfreichster Kommentar

Entschuldigung, ich habe nicht bemerkt, dass es einen ganzen Thread zu dieser Idee gibt! Das heißt, das ist eine gute Idee, oder?

Alle 5 Kommentare

Kann sich jemand erinnern oder haben die Links bitte?

Können wir .I für die globale Zeilennummer ohne Gruppierung und .i für die lokale Zeilennummer nur innerhalb der Gruppierung verwenden?

@dracodoc wie von Frank erwähnt, das ist # 1206

Entschuldigung, ich habe nicht bemerkt, dass es einen ganzen Thread zu dieser Idee gibt! Das heißt, das ist eine gute Idee, oder?

Beispiel von 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
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen