часть 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 и 2 выше в одну строку. Это возвращает строку, подобную dat[dat[, sample(.I, 1), group]$V1]
, но также добавляет столбец N
, показывающий количество идентификаторов (предполагается, что он равен числу строк в группе)
dat[sample(.N), c(.SD[1], .N), keyby=group]