r-矩阵列中匹配值的计数



我真的不知道如何正确地使用这个词,但我想统计一下列之间相似的次数。

想象一下,我有下面列出的3支NFL球队。零是损失,一是胜利。争吵是NFL赛季的一周。我想创建一个矩阵,显示每个NFL球队与其他球队有多少次比赛结果相同。我想m%*%t(m)会给出每对球队都有相同结果的计数,但这似乎不正确。新的矩阵将是一个3x3的海豚喷气式飞机,沿着行和列飞行。我会忽略对角线,因为它们是无意义的

  dolphins=c(1,0,1)
  jets= c(0,1,0)
   bills = c(1,1,1)
   m=matrix(c(dolphins, jets,bills),3,3)
   colnames(m)=c("dolphins","jets","bills")
   m
   solution = matrix(c(1,0,2,0,1,1,2,1,1),3,3)
   solution

如果有其他方法可以解决这个问题,那就太好了,但我很确定有一种方法可以用线性代数运算来解决这个问题

请注意,当比较两列时,我们有#{the same outcome} = nrow(m) - #{different outcomes}。这表明我们可以使用列之间的曼哈顿距离。这可以通过以下方式实现:

nrow(m) - dist(t(m), method = "manhattan", diag = TRUE, upper = TRUE)
#          dolphins jets bills
# dolphins        0    0     2
# jets            0    0     1
# bills           2    1     0
solution
#      [,1] [,2] [,3]
# [1,]    1    0    2
# [2,]    0    1    1
# [3,]    2    1    1

您正走在正确的轨道上:

result <- t(m) %*% m
         dolphins jets bills
dolphins        2    0     2
jets            0    1     1
bills           2    1     3

或者,

 result <- crossprod(m)

编辑下面的评论提醒我,当球队在同一周失利时,结果是一样的。可以考虑到这一点

result <- crossprod(m) + crossprod(1-m)

如果你想在主对角线上有1,只需执行:

diag(result) <- 1
         dolphins jets bills
dolphins        1    0     2
jets            0    1     1
bills           2    1     1

相关内容

  • 没有找到相关文章

最新更新