向量的简单成对差分
Simple Pairwise Difference of vector
我想计算一个向量的成对差异,我看到人们使用 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() 函数,那也很好。
您的代码中的一步太多了,使用它,您会得到想要的结果:
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
这是使用 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
这里,前两列是向量的元素,第三列是距离。
我想计算一个向量的成对差异,我看到人们使用 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() 函数,那也很好。
您的代码中的一步太多了,使用它,您会得到想要的结果:
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
这是使用 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
这里,前两列是向量的元素,第三列是距离。