向量的简单成对差异

时间:2016-06-20 13:12:00

标签: r difference

我想采用矢量的成对差异,我看到人们在这里使用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()函数,那也很好。

2 个答案:

答案 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