我正在尝试计算两篇科学论文之间的接近度量值。如果论文A的作者中有2位住在阿姆斯特丹,1位在纽约,而论文B的3位作者住在阿姆斯特丹,我希望结果是3+2=5。我有两个大的矩阵,其中列表示论文,行表示城市。例如:
MatrixA:
A1 A2
美国加利福尼亚州戴维斯分校,加州分校,分校分校,4个分校分校。
洛杉矶,美国加利福尼亚州,华盛顿。*1
美国加利福尼亚州帕洛阿尔托是美国加州的一家公司,也是一家美国公司。*1
美国加利福尼亚州萨克拉门托将于2012年3月开始运营。
美国加利福尼亚州圣莫尼卡,加利福尼亚州。*2
和MatrixB:
B1
美国加利福尼亚州戴维斯分校,加州分校,分校
洛杉矶,美国加利福尼亚州,2010年2月2日
美国加利福尼亚州帕洛阿尔托是一家位于加州的银行,该银行位于加州。
美国加利福尼亚州萨克拉门托,州1
美国加利福尼亚州圣莫尼卡,2010年2月2日
两者的交积(MatrixA %*% t(MatrixB))接近我想要的结果。这会给我A2-B1,
(0*1)+(1*2)+(1*0)+(0*1)+(2*2)=6
但我想要的是:
(0*1)+(1+2)+(1*0)+(0*1)+(2+2)=7
所以当1为0时乘法,否则就加法。有没有一个有效的(!)实现这一点的方法,使用R?
发布于 2016-10-31 19:12:14
您所要做的就是首先将A
和B
矩阵中的0
替换为NA
,然后将它们添加到中,并使用na.rm=TRUE
执行colSums
A[A==0] <- NA
B[B==0] <- NA
## I'm assuming that you want to compare B to all columns of A
C <- colSums(A + rep(B,ncol(A)), na.rm=TRUE)
## A1 A2
## 8 7
数据:
A <- structure(c(4, 0, 0, 2, 0, 0, 1, 1, 0, 2), .Dim = c(5L,
2L), .Dimnames = list(NULL, c("A1", "A2")))
## A1 A2
##[1,] 4 0
##[2,] 0 1
##[3,] 0 1
##[4,] 2 0
##[5,] 0 2
B <- structure(c(1, 2, 0, 1, 2), .Dim = c(5L, 1L), .Dimnames = list(
NULL, "B1"))
## B1
##[1,] 1
##[2,] 2
##[3,] 0
##[4,] 1
##[5,] 2
https://stackoverflow.com/questions/40340440
复制相似问题