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

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

Предположим, что данные

dat <- data.table(id=1:100, group=sample(1:20,100, replace=TRUE), a=runif(100), b=rnorm(100))

и я хочу сделать две вещи:

  1. подсчитать количество идентификаторов в группе
  2. выбрать из каждой группы один случайный идентификатор и записать его значение в a и b

Я мог бы следовать Как извлечь несколько случайных строк из таблицы данных на лету и выберите

dat[n=.N, a=a[sample(.N,1)], b=b[sample(.N,1)], group]

, но я боюсь, это выберет a и b независимо друг от друга. Есть ли способ выбрать то же самое?

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
поделиться
Другие вопросы по тегам:

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