将属性向量转换为具有元素差异的矩阵

时间:2017-10-26 13:53:43

标签: r matrix vector similarity sna

与此previous post类似,我需要将属性向量转换为矩阵。这次使用R。

的元素对之间存在差异

例如,我有一个向量报告N人的年龄(从18到90岁)。我需要将此向量转换为名为A的NxN矩阵(在行和列上具有人名),其中每个单元格Aij具有| age_i-age_j |的值,表示两个人i和j之间的年龄的绝对差异。

这是一个有3个人的例子,前18个,第2个23个,第3个60个,产生这个向量:

c(18, 23, 60) 

我想把它转换成这个矩阵:

A = matrix( c(0, 5, 42, 5, 0, 37, 42, 37, 0), nrow=3, ncol=3, byrow = TRUE) 

1 个答案:

答案 0 :(得分:1)

tmp <- c(18, 23, 60)

您可以将dist与几个参数一起使用:

dist(tmp, upper=TRUE, diag=TRUE)
   1  2  3
1  0  5 42
2  5  0 37
3 42 37  0

请注意,dist函数会返回“dist”对象,因此您可能希望将其强制转换为as.matrix的矩阵。然后你可以删除参数:

as.matrix(dist(tmp))
   1  2  3
1  0  5 42
2  5  0 37
3 42 37  0

或者再次使用outer。将它作为减法运算符,然后取绝对值。

abs(outer(tmp, tmp, "-"))

     [,1] [,2] [,3]
[1,]    0    5   42
[2,]    5    0   37
[3,]   42   37    0

据推测,dist将比outer更快,因为算法可以利用此类计算中存在的对称性,而outer更为通用。