data.table «ключевые индексы» или «групповой счетчик»

После создания ключа в data.table:

set.seed(12345)
DT 

Ответы на вопрос(2)

наверное, просто сделаю это, так как я вполне уверен, что в вызове нет счетчика индекса:[.data.table()

ii <- unique(DT)
ii[ , i := seq_len(nrow(ii))]
DT[ii]
#     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

Вы можете сделать это однострочным за счет дополнительного вызова:unique.data.table()

DT[unique(DT)[ , i := seq_len(nrow(unique(DT)))]]
Решение Вопроса

Обновление: отv1.8.3Вы можете просто использовать встроенный специальный:.GRP

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

Смотрите историю для старых ответов.

 Josh O'Brien22 окт. 2012 г., 22:53
Я думаю.GRP это очень хорошая идея, и желал этого в прошлом. Хорошее и, казалось бы, оптимальное решение, кстати.
 Matt Dowle01 сент. 2016 г., 18:49
@BrandonBertelsen Руководство. Тип .I '?data.table
 Brandon Bertelsen01 сент. 2016 г., 08:46
Как найти документацию по этим и другим переменным, таким как.SDcols? ??.GRP и т.п.
 Matt Dowle23 окт. 2012 г., 10:41
@JoshO»Брайен Хорошо,.GRP сейчас в 1.8.3.

Ваш ответ на вопрос