我正在尝试从一个简单的三变量数据集生成一个邻接矩阵(后来用于创建一个社交网络图)。见下文。
Year Company Project
2001 A Proj1
2001 B Proj1
2005 C Proj3
2004 D Proj4
2004 E Proj4
这个想法是生成一个矩阵,其中行和列是公司,边缘表示任何给定的公司对是否参与了同一个项目。这看起来像是:
A B C D E
A 0 1 0 0 0
B 1 0 0 0 0
C 0 0 0 0 0
D 0 0 0 0 1
E 0 0 0 1 0
我如何在R中完成这样的事情?基于其他用户的尝试,我尝试了reshape2,但没有运气。 任何帮助,将不胜感激。 谢谢!
答案 0 :(得分:2)
有更好的方法,但这是我所知道的。你需要qdap的开发版本。按照THIS PAGE底部的说明获取。
## dat <- read.table(text="Year Company Project
## 2001 A Proj1
## 2001 B Proj1
## 2005 C Proj3
## 2004 D Proj4
## 2004 E Proj4", header=TRUE)
library(qdap)
x <- adjmat(mtabulate(split(dat$Company, dat$Project)))
x$adjacency
## > x$adjacency
## A B C D E
## A 1 1 0 0 0
## B 1 1 0 0 0
## C 0 0 1 0 0
## D 0 0 0 1 1
## E 0 0 0 1 1
不可否认,为这个问题安装很多。它也可以使用reshape2包完成,并且有人也一定会提供该解决方案。
修改强>
不需要重塑这里更好的方式......
x <- table(dat[, -1])
x %*% t(x)
## Company
## Company A B C D E
## A 1 1 0 0 0
## B 1 1 0 0 0
## C 0 0 1 0 0
## D 0 0 0 1 1
## E 0 0 0 1 1
如果你真的想要对角线上的零:
y <- x %*% t(x)
diag(y) <- 0
y