我想采用矢量的成对差异,我看到人们在这里使用dist是我正在使用的数据类型的一个例子:
v <- c(1:4)
names(v) <- c('a','b','c','d')
v <- data.frame(t(v))
dist(v)
目前dist(v)产生dist(0),我希望:
a b c
b 1
c 2 1
d 3 2 1
我只想要dist(v)的对角线,我知道我可以使用diag()函数提取。如果有办法不必使用diag()函数,那也很好。
答案 0 :(得分:2)
以下是使用combn
# convert to a vector
vNew <- as.numeric(v[1,])
# calculate pair-wise differences
t(rbind(combn(vNew,2), combn(vNew, 2, FUN=dist)))
[,1] [,2] [,3]
[1,] 1 2 1
[2,] 1 3 2
[3,] 1 4 3
[4,] 2 3 1
[5,] 2 4 2
[6,] 3 4 1
这里,前两列是向量的元素,第三列是距离。
答案 1 :(得分:1)
您的代码中有一个步骤过多,使用此步骤可以获得所需的结果:
v <- c(1:4)
names(v) <- c('a','b','c','d')
dist(v)
a b c
b 1
c 2 1
d 3 2 1