2015-09-07 7 views
2

У меня есть таблица данных с n группирующими переменными (в данном случае 2). Я хочу добавить столбец идентификатора для каждой группы, как показано на нужном выходе ниже. Я попытался :=: .N`, и я понимаю, почему это не работает, но не знаю, как это произошло:data.table внутри группы id

library(data.table) 
dat <- data.table::data.table(
    w = 1:16, 
    x = LETTERS[1:2], 
    y = 1:4 
)[, w := NULL][order(x, y)] 


##  x y 
## 1: A 1 
## 2: A 1 
## 3: A 1 
## 4: A 1 
## 5: A 3 
## 6: A 3 
## 7: A 3 
## 8: A 3 
## 9: B 2 
## 10: B 2 
## 11: B 2 
## 12: B 2 
## 13: B 4 
## 14: B 4 
## 15: B 4 
## 16: B 4 


dat[, z := 1:.N, by = list(x, y)] 
dat 

Желаемая Выход

##  x y z 
## 1: A 1 1 
## 2: A 1 1 
## 3: A 1 1 
## 4: A 1 1 
## 5: A 3 2 
## 6: A 3 2 
## 7: A 3 2 
## 8: A 3 2 
## 9: B 2 3 
## 10: B 2 3 
## 11: B 2 3 
## 12: B 2 3 
## 13: B 4 4 
## 14: B 4 4 
## 15: B 4 4 
## 16: B 4 4 

ответ

4
dat[, z:=.GRP,by=list(x,y)] 
dat 
#  x y z 
# 1: A 1 1 
# 2: A 1 1 
# 3: A 1 1 
# 4: A 1 1 
# 5: A 3 2 
# 6: A 3 2 
# 7: A 3 2 
# 8: A 3 2 
# 9: B 2 3 
# 10: B 2 3 
# ... 
Смежные вопросы