R:重新编码矩阵中没有对称匹配的单元

L. *_*ker 3 r matrix dplyr tidyverse

我有一个由 0 和 1 组成的邻接矩阵,表示并列提名。有些提名是不互惠的,因此矩阵是不对称的。

如果单元格值没有对称匹配,我想将单元格值从 1 重新编码为 0。

样本小矩阵:

     [,1] [,2] [,3] [,4]
[1,]    0    1    0    1
[2,]    0    0    1    0
[3,]    0    0    0    1
[4,]    1    0    1    0
Run Code Online (Sandbox Code Playgroud)

所需输出:

     [,1] [,2] [,3] [,4]
[1,]    0    0    0    1
[2,]    0    0    0    0
[3,]    0    0    0    1
[4,]    1    0    1    0
Run Code Online (Sandbox Code Playgroud)

Rui*_*das 5

首先是数据,然后一行行即可完成。将0/1矩阵视为逻辑 AND 及其转置。+()强制为整数,技巧就完成了。

x <- scan(text="    0    1    0    1
    0    0    1    0
    0    0    0    1
    1    0    1    0")
x <- matrix(x, nrow = 4, byrow = TRUE)

y <- +(x & t(x))
y
#>      [,1] [,2] [,3] [,4]
#> [1,]    0    0    0    1
#> [2,]    0    0    0    0
#> [3,]    0    0    0    1
#> [4,]    1    0    1    0
Run Code Online (Sandbox Code Playgroud)

由reprex 包于 2022 年 2 月 9 日创建(v2.0.1)