问题描述
这里是一个玩具示例,它使用来自“弗兰克”,“萨拉”,“乔什”和“爱丽丝”的假设数据。在此示例中,参与者表明了他们对三项政治政策的认可(减税,全民医疗保健,延长期限),因此“ 1”代表认可,“ 0”代表对该政策的反对。
d<-data.frame("Name"=c("Frank","Sarah","Josh","Elyse"),"tax_cuts"=c(0,1,1),"u_healthcare"=c(1,0),"ex_term"=c(0,0))
d
Name tax_cuts u_healthcare ex_term
Frank 0 1 0
Sarah 1 1 0
Josh 1 0 1
Elyse 1 0 0
如何创建一个矩阵,其中的边表示策略的共同认可数。例如,莎拉(Sarah)共同认可减税和延长期限限制,而乔什(Josh)共同认可延长的期限限制和减税,因此这些政策将有1个共同认可。得到的矩阵将是一个3-3方阵,具有以下值。
mat<-rbind(c(0,c(1,0))
rownames(mat)<-c("tax_cuts","u_healthcare","ex_term")
colnames(mat)<-c("tax_cuts","ex_term")
print(mat)
tax_cuts u_healthcare ex_term
tax_cuts 0 1 1
u_healthcare 1 0 0
ex_term 1 0 0
解决方法
我们可以通过矩阵乘法来实现:
t(d[-1]) %*% as.matrix(d[-1])
tax_cuts u_healthcare ex_term
tax_cuts 3 1 1
u_healthcare 1 2 0
ex_term 1 0 1
对角线是每个背书的计数。如果愿意,可以将其设置为0。
coendorse = t(d[-1]) %*% as.matrix(d[-1])
diag(coendorse) = 0
coendorse
# tax_cuts u_healthcare ex_term
# tax_cuts 0 1 1
# u_healthcare 1 0 0
# ex_term 1 0 0
,
使用crossprod
crossprod(as.matrix(d[-1]),as.matrix(d[-1]))
# tax_cuts u_healthcare ex_term
#tax_cuts 3 1 1
#u_healthcare 1 2 0
#ex_term 1 0 1