【发布时间】:2017-01-23 17:27:25
【问题描述】:
我有一个矩阵,代表不同工作之间的流动性:
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 没有分组。或任何其他组合。
感谢您的宝贵时间,
【问题讨论】:
-
鉴于您在 group.list 中提供的组,我无法复制 group.jobdat 并且构造 group.jobdat 的代码会引发错误。
-
好吧,很抱歉,明天早上我再次使用 R 时,我无法纠正它。
-
听起来不错。当你这样做时告诉我,我会看看。
-
太好了,谢谢。现在应该可以重现了。
标签: r matrix adjacency-matrix sna