【问题标题】:building matrix out of a vector with the difference of each value用每个值的差异从向量中构建矩阵
【发布时间】:2016-10-13 09:43:11
【问题描述】:
dataset2 <- data.frame(bird=c("A","B","C","D","E","F"), rank=c(1:6))

我有这个示例数据集,现在我想构建一个 6*6 矩阵,其中包含每只鸟之间的等级差异。我该怎么做?

【问题讨论】:

标签: r matrix


【解决方案1】:

这是你想要的吗?

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

【讨论】:

  • 好的,我现在的问题是,我需要 dataset2$bird 是,我必须运行 dist() 以便我没有双重结果。这样做之后,我的 col- 和 rownames 就消失了。现在问题出在她身上,因为我使用此功能删除了一列,但出现错误。我该如何解决。抱歉,我是 R 新手。
  • m
  • @TimoRath 你想要一个方阵 (n*n) 最后还是什么?
  • 是的,因为我想将两个矩阵与 mantel 测试进行比较,所以我需要 colnames 和 rownames 以及一个方阵。我应该在此之前说过
  • @TimoRath 如果您将此作为最后一行运行会怎样? m[upper.tri(m)] &lt;- 0
【解决方案2】:

这算是距离矩阵的一种定义吧?

dist(dataset2, method="maximum")
####  
 1        
 2 1      
 3 2 1    
 4 3 2 1  
 5 4 3 2 1

区别在于它只返回正距离......也许它不适合 OP..

【讨论】:

    猜你喜欢
    • 2012-03-11
    • 2018-10-05
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 2017-11-18
    • 2015-04-16
    • 2014-12-08
    • 1970-01-01
    相关资源
    最近更新 更多