#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, все записи должны быть ЛОЖНЫМИ. Спасибо!