Генерация списка ребер из идентификатора и векторов группировки

У меня есть фрейм данных из 205 000+ строк, отформатированных следующим образом:

df <- data.frame(project.id = c('SP001', 'SP001', 'SP001', 'SP017', 'SP018', 'SP017'),
                 supplier.id = c('1224', '5542', '7741', '1224', '2020', '9122'))

В фактическом фрейме данных имеется более 6700 уникальных значенийproject.id, Я хотел бы создать пограничный список, который объединяет поставщиков, которые работали над одним проектом.

Желаемый конечный результат дляproject.id = SP001:

to     from
1224   5542
1224   7741
5542   7741

До сих пор я пытался использоватьsplit создать список с помощью project.id и затем запуститьlapply+combn генерировать все возможные комбинацииsupplier.id в каждом списке / группе:

try.list <- split(df, df$project.id)
try.output <- lapply(try.list, function(x) combn(x$supplier.id, 2))

Есть ли более элегантный / эффективный (читай «вычислено менее чем за 2 часа») способ создания чего-то подобного?

Любая помощь приветствуется

Ответы на вопрос(3)

Ваш ответ на вопрос