将二元向量转换为二进制矩阵

Mr.*_*Zen 4 binary r vector matrix

我有一个二进制向量,可以保存某些观察事件是否发生的信息:

v <- c(0,1,1,0)
Run Code Online (Sandbox Code Playgroud)

我想要实现的是一个矩阵,其中包含该向量中所有双变量观测对的信息.也就是说,如果两个观察值都为0或两个都在此向量v中有1,则它们应该在矩阵中得到1.如果一个有0而另一个有1,那么它们应该得到0.

因此,目标是这个矩阵:

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

主对角线是0还是1对我来说无关紧要.

有没有一种有效而简单的方法来实现这一点,不需要if语句和for循环的组合?v可能是相当大的.

谢谢!

mar*_*kus 5

我们可以用 outer

out <- outer(v, v, `==`)
diag(out) <- 0L # as you don't want to compare each element to itself
out
#     [,1] [,2] [,3] [,4]
#[1,]    0    0    0    1
#[2,]    0    0    1    0
#[3,]    0    1    0    0
#[4,]    1    0    0    0
Run Code Online (Sandbox Code Playgroud)