Это означает, что вы пытаетесь получить доступ к индексу массива, который недопустим, поскольку он не находится между границами.
Например, это инициализировало бы примитивный целочисленный массив с верхней границей 4 .
int intArray[] = new int[5];
Программисты подсчитываются с нуля. Таким образом, это, например, выбрало бы ArrayIndexOutOfBoundsException
, поскольку верхняя граница равна 4, а не 5.
intArray[5];
Если вы хотите посчитать количество уникальных идентификаторов и некоторые идентификаторы повторяются в группах
dat[, .(n_ids = uniqueN(id)), group]
Если идентификаторы не повторяются в группах или вы не хотите чтобы подсчитать их уникально
dat[, .(n_ids = .N), group]
Если идентификаторы повторяются внутри групп, и вы хотите вернуть все строки для случайно выбранного идентификатора в каждой группе
dat[dat[, .(id = sample(id, 1)), group], on = .(id, group)]
Если идентификаторы не повторяются или вы все равно хотите только одну строку на группу
dat[dat[, sample(.I, 1), group]$V1]
Благодаря комментарию Фрэнка вы также можете сделать второй вариант для частей 1 & amp; 2 выше в одной строке. Это возвращает строку, подобную dat[dat[, sample(.I, 1), group]$V1]
, но также добавляет столбец N
, показывающий количество идентификаторов (предполагается, что он равен числу строк в группе)
dat[sample(.N), c(.SD[1], .N), keyby=group]