образец из data.table

Это означает, что вы пытаетесь получить доступ к индексу массива, который недопустим, поскольку он не находится между границами.

Например, это инициализировало бы примитивный целочисленный массив с верхней границей 4 .

int intArray[] = new int[5];

Программисты подсчитываются с нуля. Таким образом, это, например, выбрало бы ArrayIndexOutOfBoundsException, поскольку верхняя граница равна 4, а не 5.

intArray[5];
1
задан bumblebee 27 June 2019 в 19:05
поделиться

1 ответ

Часть 1

Если вы хотите посчитать количество уникальных идентификаторов и некоторые идентификаторы повторяются в группах

dat[, .(n_ids = uniqueN(id)), group]

Если идентификаторы не повторяются в группах или вы не хотите чтобы подсчитать их уникально

dat[, .(n_ids = .N), group]

Часть 2

Если идентификаторы повторяются внутри групп, и вы хотите вернуть все строки для случайно выбранного идентификатора в каждой группе

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]
7
ответ дан IceCreamToucan 27 June 2019 в 19:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: