les données.tableau “indices clés” ou “groupe de comptoir”
Après la création d'une clé sur un ensemble de données.tableau:
set.seed(12345)
DT <- data.table(x = sample(LETTERS[1:3], 10, replace = TRUE),
y = sample(LETTERS[1:3], 10, replace = TRUE))
setkey(DT, x, y)
DT
# x y
# [1,] A B
# [2,] A B
# [3,] B B
# [4,] B B
# [5,] C A
# [6,] C A
# [7,] C A
# [8,] C A
# [9,] C C
# [10,] C C
Je voudrais obtenir un entier vecteur donnant pour chaque ligne correspondant à la "clé de l'index". J'espère que le résultat attendu (colonne i
) ci-dessous permettra de clarifier ce que je veux dire:
# x y i
# [1,] A B 1
# [2,] A B 1
# [3,] B B 2
# [4,] B B 2
# [5,] C A 3
# [6,] C A 3
# [7,] C A 3
# [8,] C A 3
# [9,] C C 4
# [10,] C C 4
J'ai pensé à utiliser quelque chose comme cumsum(!duplicated(DT[, key(DT), with = FALSE]))
mais je suis en espérant que il y a une meilleure solution. Je crois que ce vecteur peut faire partie de la table interne de la représentation, et peut-être il ya un moyen d'y accéder? Même si elle n'est pas le cas, que suggérez-vous?
Vous devez vous connecter pour publier un commentaire.
Mise à jour: à Partir de
v1.8.3
, vous pouvez simplement utiliser la fonction intégrée de spécial.GRP
:Voir l'histoire pour les plus âgés des réponses.
.GRP
est une très bonne idée, et ont voulu pour elle dans le passé. Belle et apparemment la solution optimale, BTW..GRP
maintenant dans 1.8.3..SDcols
? ??.GRP
etc.?data.table
.Je serais probablement juste de le faire, puisque je suis assez confiant qu'aucun index compteur est disponible à partir de l'intérieur de l'appel à
[.data.table()
:Vous pourrait en faire un one-liner, au détriment d'un autre appel à
unique.data.table()
: