与此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)
答案 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
更为通用。