在NxN矩阵中给出值" True"从数据框对

时间:2014-12-10 15:32:09

标签: r matrix

我创建了一个5x5矩阵,其中行和列具有相同的名称,以及具有名称对的数据框:

N <- 5
Names <- letters[1:N]

mat <- matrix(rep(0, N*N), nrow = N, ncol = N, dimnames = list(Names, Names))

  a b c d e
a 0 0 0 0 0
b 0 0 0 0 0
c 0 0 0 0 0
d 0 0 0 0 0
e 0 0 0 0 0

数据框由不同的对组成:

  col1 col2
1    a    c
2    c    b
3    d    b
4    d    e

如何匹配这些,以便col1仅引用矩阵中的行而col2仅引用列?以上应计算以下结果:

  a b c d e
a 0 0 1 0 0
b 0 0 0 0 0
c 0 1 0 0 0
d 0 1 0 0 1
e 0 0 0 0 0

2 个答案:

答案 0 :(得分:1)

您可以使用match创建一个“键”,其组合需要替换为1,如下所示:

key <- vapply(seq_along(mydf), 
              function(x) match(mydf[[x]], 
                                dimnames(mat)[[x]]), 
              numeric(nrow(mydf)))

然后,使用矩阵索引来替换相关值。

mat[key] <- 1
mat
  a b c d e
a 0 0 1 0 0
b 0 0 0 0 0
c 0 1 0 0 0
d 0 1 0 0 1
e 0 0 0 0 0

答案 1 :(得分:0)

你也可以这样做:

 mat[as.matrix(d1)] <- 1
 mat
 #  a b c d e
 #a 0 0 1 0 0
 #b 0 0 0 0 0
 #c 0 1 0 0 0
 #d 0 1 0 0 1
 #e 0 0 0 0 0

数据

 d1 <- structure(list(col1 = c("a", "c", "d", "d"), col2 = c("c", "b", 
  "b", "e")), .Names = c("col1", "col2"), class = "data.frame",
  row.names = c("1", "2", "3", "4"))