dataset2 <- data.frame(bird=c("A","B","C","D","E","F"), rank=c(1:6))
我有这个示例数据集,现在我想构建一个6 * 6矩阵,每个鸟之间的等级差异。我怎么能这样做?
答案 0 :(得分:2)
这是你想要的吗?
m <- with(dataset2, outer(rank, rank, '-'))
rownames(m) <- colnames(m) <- dataset2$bird
# A B C D E F
# A 0 -1 -2 -3 -4 -5
# B 1 0 -1 -2 -3 -4
# C 2 1 0 -1 -2 -3
# D 3 2 1 0 -1 -2
# E 4 3 2 1 0 -1
# F 5 4 3 2 1 0
你可能之后也希望这样做:
m[upper.tri(m)] <- 0
tail(m[,-ncol(m)],-1)
获得:
# A B C D E
#B 1 0 0 0 0
#C 2 1 0 0 0
#D 3 2 1 0 0
#E 4 3 2 1 0
#F 5 4 3 2 1
答案 1 :(得分:0)
这是距离矩阵的定义,没有?
dist(dataset2, method="maximum")
####
1
2 1
3 2 1
4 3 2 1
5 4 3 2 1
区别在于它只返回正距离......也许它不适合OP ..