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
Kann sich jemand erinnern oder haben die Links bitte?
Wahrscheinlich das, wonach Sie suchen: https://stackoverflow.com/a/34755995/ und https://github.com/Rdatatable/data.table/issues/1494 Obwohl der Titel ".I in DT [i, .I] sollte Zeilennummern von DT zurückgeben, nicht von DT [i] "(ohne das by), da es dieses Verhalten bereits hat, wenn by = vorhanden ist ...?
Eine weitere Frage zu .I und von = https://github.com/Rdatatable/data.table/issues/1206
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
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?