r - 将二进制向量转换为二进制矩阵

标签 r matrix vector binary

我有一个二进制向量,其中包含有关某些事件是否发生以进行某些观察的信息:

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/

相关文章:

r - 如何更改ggplot对象中所有文本相对于当前值的字体大小?

c - 在C中对2D数组(矩阵)进行排序

c++ - 在 RAD Studio 2007 的 Watch 中评估表达式

c++ - 在 C++ 中使用 vector 创建随机数

c++ - 删除两个 vector 中的公共(public)对象/获取 vector 中的重复对象(不删除)

r - 在 R Shiny 数据表中添加动态 UI 元素

r - 使用 R 包分发半实时数据集有哪些方法?

regex - 在 R 中使用 gsub 删除除撇号和字内破折号之外的标点符号,而不会意外连接两个单词

CUDA:具有共享内存和非 block 大小倍数的矩阵大小的平铺矩阵-矩阵乘法

c - MIPS 中的错误寻址 - 矩阵乘法