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可能是相当大的.
谢谢!
我们可以用 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)