Новый столбец на основе случайной выборки с номером выборки из второй таблицы

#r #dplyr #data.table

#r #dplyr #data.table

Вопрос:

У меня есть таблица 1 — длинная таблица идентификаторов и лет. например

 ID    YEAR
 1    2010
 1    2011
 2    2010
 2    2011
 3    2008
  

и т.д… Существуют тысячи строк, и каждая из них уникальна.

И таблица 2 — небольшая таблица с указанием лет и количества идентификаторов для выборки.

 YEAR    SAMPLE_NO
2008        10
2009       110
2010      1200
  

Не все ГОДЫ в таблице 1 отображаются в таблице 2.

Мне нужно добавить двоичный столбец TRUE / FALSE в таблицу 1, где для каждого ГОДА случайной выборке присваивается значение TRUE, а число, получившее значение TRUE, берется из SAMPLE_NO в таблице 2.

Я пытался сделать это с помощью dplyr. Я составил список лет, которые указаны в таблице 2, а затем отфильтровал, чтобы выбрать эти годы. Я застрял на том, как сделать следующий шаг — я думаю, что это какая-то комбинация group_by и mutate, но не могу понять, как случайным образом применить номера выборок из таблицы 2.

Комментарии:

1. Можете ли вы добавить ожидаемый результат?

Ответ №1:

Предполагая, что количество строк в table1 для каждого YEAR всегда больше, чем равно соответствующему SAMPLE_NO in table2 , вы можете сделать :

 library(dplyr)

table1 %>%
  left_join(table2,  by = 'YEAR') %>%
  group_by(YEAR) %>%
  mutate(newcol = row_number() %in% sample(n(), first(SAMPLE_NO)))
  

Комментарии:

1. Спасибо. Будет ли это работать, если в таблице 1 есть годы, которых нет в таблице 2? Я думаю, что они закончатся как NA после объединения, и тогда номер выборки будет NA …?

2. Что вы хотите сделать, если в таблице 1 есть годы, которых нет в таблице 2?

3. Неважно, я могу просто изменить любые NA на ноль. Там, где годы не указаны в таблице 2, все записи должны быть ЛОЖНЫМИ. Спасибо!