data.table, „key indices” lub „group counter”

Po utworzeniu klucza w tabeli danych:

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

Chciałbym uzyskać wektor liczb całkowitych nadający każdemu wierszowi odpowiedni „indeks klucza”. Mam nadzieję, że oczekiwany wynik (kolumna i) poniżej pomoże wyjaśnić, co mam na myśli:

#       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

Myślałem o użyciu cumsum(!duplicated(DT[, key(DT), with = FALSE])), ale mam nadzieję, że istnieje lepsze rozwiązanie. Wydaje mi się, że ten wektor może być częścią wewnętrznej reprezentacji tabeli i może jest jakiś sposób, aby uzyskać do niego dostęp? Nawet jeśli tak nie jest, co byście zaproponowali?

1 odpowiedź

możesz po prostu użyć wbudowanego specjalnego .GRP:

DT[ , i := .GRP, by = key(DT)]

Twoja odpowiedź

Zaloguj się aby odpowiedzieć.

Operiada

Operiada to polskojęzyczne forum informatyczne działające na zasadzie pytań i odpowiedzi.

Obserwowane tagi

Zaloguj się aby obserwować tagi.