У меня есть следующие данные. table
set.seed(1)
DT <- data.table(VAL = sample(c(1, 2, 3), 10, replace = TRUE))
VAL
1: 1
2: 2
3: 2
4: 3
5: 1
6: 3
7: 3
8: 2
9: 2
10: 1
Внутри каждого номера в VAL
я хочу:
- Подсчитайте количество записей/строк
- Создать индекс строки (счетчик) первого, второго, третьего вхождения и т.д.
В конце я хочу получить результат
VAL COUNT IDX
1: 1 3 1
2: 2 4 1
3: 2 4 2
4: 3 3 1
5: 1 3 2
6: 3 3 2
7: 3 3 3
8: 2 4 3
9: 2 4 4
10: 1 3 3
где "COUNT" - количество записей/строк для каждого "VAL", а "IDX" - индекс строки в каждом "VAL".
Я попытался работать с which
и length
с помощью .I
:
dt[, list(COUNT = length(VAL == VAL[.I]),
IDX = which(which(VAL == VAL[.I]) == .I))]
но это не работает, так как .I
относится к вектору с индексом, поэтому я предполагаю, что нужно использовать .I[]
. Хотя внутри .I[]
я снова сталкиваюсь с проблемой, что у меня нет индекса строки, и я знаю (из чтения data.table
часто задаваемых вопросов и после сообщений здесь), что по возможности следует избегать чередования строк.
Итак, что за стиль data.table
?