我有一个二进制向量,其中包含有关某些事件是否发生以进行某些观察的信息:
v <- c(0,1,1,0)
我想要实现的是一个矩阵,其中包含有关此向量中所有双变量观测值对的信息。也就是说,如果两个观测值在向量 v 中都为 0 或都为 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
主对角线是 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
关于r - 将二进制向量转换为二进制矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53553895/