Generando una lista de borde desde ID y agrupando vectores
Tengo un marco de datos de más de 205,000 filas formateadas de la siguiente manera:
df <- data.frame(project.id = c('SP001', 'SP001', 'SP001', 'SP017', 'SP018', 'SP017'),
supplier.id = c('1224', '5542', '7741', '1224', '2020', '9122'))
En el marco de datos real hay más de 6700 valores únicos deproject.id
. Me gustaría crear una lista de borde que empareje a los proveedores que han trabajado en el mismo proyecto.
Resultado final deseado paraproject.id = SP001
:
to from
1224 5542
1224 7741
5542 7741
Hasta ahora he intentado usarsplit
para crear una lista por project.id y luego ejecutarlapply+combn
para generar todas las combinaciones posibles desupplier.id
dentro de cada lista / grupo:
try.list <- split(df, df$project.id)
try.output <- lapply(try.list, function(x) combn(x$supplier.id, 2))
¿Existe una forma más elegante / eficiente (léase "calculada en menos de 2 horas") para generar algo como esto?
Cualquier ayuda sería muy apreciada