У меня есть справочный фрейм данных (df1) с тремя столбцами «характеристик» (пол, год, код) и двумя столбцами «значений» (сумма, статус).Это выглядит так, но со многими строками:
gender year code amount status
M 2011 A 15 EMX
M 2011 A 123 NOX
F 2015 B 0 MIX
F 2018 A 12 NOX
F 2015 B 11 NOX
У меня есть еще один фрейм данных (df2), в котором только три столбца «характеристики».Например:
gender year code
M 2011 A
M 2011 A
F 2018 A
F 2015 B
Для каждой строки в df2 я хочу назначить "значения" на основе совпадений в "характеристиках" для df1.Там, где есть несколько совпадений, я хочу выбрать пары «значений» в случайном порядке.Поэтому, когда в df2 есть повторяющиеся «характеристики», они могут получить разные пары «значений», но все они будут иметь точное совпадение в df1.По сути, для каждой комбинации признаков я хочу, чтобы распределение значений совпадало между двумя таблицами.
Например, последняя строка в 'df2' (пол = F, год = 2015, код = B)соответствует двум строкам в 'df1': третьей строке (amont = 0, status = MIX) и пятой строке (сумма = 11, status = NOX).Затем одна из этих совпадающих строк должна быть выбрана случайным образом.Для всех таких случаев множественных совпадений между 'df2' и 'df1' на основе пола, года и кода следует выбирать случайную строку.
До сих пор мой подход состоял в том, чтобы начать с использованияdplyr
, чтобы сделать left_join
между двумя кадрами данных.Однако это обеспечивает все возможные «значения» для каждой строки в df2, а не выбирает одно случайное.Поэтому я должен сгруппировать по характеристикам и выбрать один.В результате получается очень большая промежуточная таблица, и она не кажется очень эффективной.
Интересно, есть ли у кого-нибудь предложения по более эффективному методу?Ранее я обнаружил, что объединение с пакетом data.table
происходит быстрее, но в действительности у него нет хорошего понимания пакета.Мне также интересно, должен ли я вообще делать объединения или просто использовать функцию sample
?
Любая помощь, высоко ценимая.