У меня есть матрица, которая представляет мобильность между различными работами:
jobnames <- c("job 1","job 2","job 3","job 4","job 5","job 6","job 7")
jobdat <- matrix(c(
5, 5, 5, 0, 0, 5, 5,
5, 5, 2, 5, 5, 1, 5,
1, 5, 5, 5, 0, 0, 1,
1, 0, 5, 5, 8, 0, 1,
0, 5, 0, 0, 5, 5, 1,
0, 0, 5, 5, 0, 5, 5,
0, 1, 0, 0, 5, 1, 5
),
nrow = 7, ncol = 7, byrow = TRUE,
dimnames = list(jobnames,jobnames
))
В анализе социальных сетей это рассматривается как направленная взвешенная матрица смежности. Направление сети — от строк к столбцам: Таким образом, мобильность определяется как переход от строки задания к столбцу задания. Диагональ актуальна, так как есть возможность перейти на ту же работу в другую фирму.
Мне нужно свернуть эту матрицу в соответствии с предварительно заданным списком, содержащим индексы заданий, которые следует объединить:
group.list <- list(grp1=c(1,2) ,grp2 =c(3,4))
Теперь, поскольку это матрица смежности, она немного отличается от других ответов о том, как свернуть матрицу, которые я нашел здесь и в других местах. Свертывание должно быть одновременным как в строках, так и в столбцах. А некоторые задания вообще не сгруппированы. Таким образом, результат в этом примере должен быть таким:
group.jobnames <- c("job 1 and 2","job 3 and 4","job 5","job 6","job 7")
group.jobdat <- matrix(c(
20,12,5,6,10,
7,17,8,0,2,
5,0,5,5,1,
0,10,0,5,5,
1,0,5,1,5
),
nrow = 5, ncol = 5, byrow = TRUE,
dimnames = list(group.jobnames,group.jobnames
))
В этом примере группируются два первых задания, а затем два следующих, но в моих реальных данных это может быть любая комбинация (индексов) заданий и любое количество заданий в каждой группе. Таким образом, задание [1,7] могло быть одной группой, а задание [2,3,6] могло быть другой группой, а задание 4 или 5 не группировались. Или любое другое сочетание.
Спасибо за уделенное время,