Cela s'est produit avant j'en suis sûr, mais je ne trouve pas le problème ou le message SO. Quelqu'un se souvient ou a les liens s'il vous plaît? Il me semble me souvenir d'avoir répondu à quelqu'un quelque chose comme " .I
est destiné à être utilisé dans le regroupement selon la documentation, mais il serait bon de l'étendre aussi au non-regroupement". La page de manuel contient toujours les mots "lors du regroupement" pour .I
.
Comportement actuel à la fois dans v1.10.4-3 et 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
>
Maintenant, which=TRUE
était prévu et fonctionne pour le premier cas (* 1):
> X["b", which=TRUE]
[1] 3
mais inclure les numéros de ligne de x dans j
( 2) n'est actuellement pas possible, sauf si vous ajoutez les numéros de ligne de x explicitement en tant que colonne. which=TRUE
car je suppose que les gens atteignent .I
abord.
Quelqu'un se souvient ou a les liens s'il vous plaît?
Probablement ce que vous recherchez: https://stackoverflow.com/a/34755995/ et https://github.com/Rdatatable/data.table/issues/1494 Bien que le titre devrait être ".I in DT [i, .I] devrait renvoyer les numéros de ligne de DT et non de DT [i] "(sans le by) car il a déjà ce comportement lorsque by = est présent ...?
Une autre question sur .I et par = https://github.com/Rdatatable/data.table/issues/1206
Peut-on utiliser .I pour le numéro de ligne global donc sans groupement, et .i pour le local donc uniquement à l'intérieur du groupement?
@dracodoc comme mentionné par Frank c'est # 1206
Désolé, je ne savais pas qu'il y avait un fil complet sur cette idée! Cela signifie que c'est une bonne idée, non?
exemple 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
Commentaire le plus utile
Désolé, je ne savais pas qu'il y avait un fil complet sur cette idée! Cela signifie que c'est une bonne idée, non?