r - 计算/翻译二进制矩阵中的数字向量/R中的向量

标签 r matrix binary permutation

我如何自动构建一个矩阵,转换 vector <- c(1,2,3) 的排列变成某种二进制格式?像这样:

x <- matrix(c(1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,1,1,1), ncol = 3)
rownames(x) <- c("1", "1,2", "2", "3", "2,3", "1,2,3")
colnames(x) <- c("1", "2", "3")

x
      1 2 3
1     1 0 0
1,2   1 1 0
2     0 1 0
3     0 0 1
2,3   0 1 1
1,2,3 1 1 1

虽然我想要的不是 3 个值,而是 7 个值。

最佳答案

这是一个非常快的单行代码:

vector <- c(1,2,3)
library(RcppAlgos)
toBinary <- function(v) permuteGeneral(0:1, length(v), TRUE)[-1,]

toBinary(vector)
     [,1] [,2] [,3]
[1,]    0    0    1
[2,]    0    1    0
[3,]    0    1    1
[4,]    1    0    0
[5,]    1    0    1
[6,]    1    1    0
[7,]    1    1    1

[-1, ] 是删除所有零的行。此行将表示 power set 中的空集.实际上,从技术上讲,您要求的是从向量的幂集(当然减去空集)到二进制矩阵的映射。

如果您确实希望 row.names 成为实际排列,您可以使用 rje 包中的 powerSet 函数。观察:

library(rje)
nameTest <- toBinary(vector)
row.names(nameTest) <- lapply(powerSet(rev(vector))[-1], sort)

nameTest
           [,1] [,2] [,3]
3             0    0    1
2             0    1    0
c(2, 3)       0    1    1
1             1    0    0
c(1, 3)       1    0    1
c(1, 2)       1    1    0
c(1, 2, 3)    1    1    1

* 免责声明:我是 RcppAlgos

的作者

关于r - 计算/翻译二进制矩阵中的数字向量/R中的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49034740/

相关文章:

ruby - 如何在 Ruby 中将字符串转换为二进制

r - 将 stargazer 与通过 lapply-ing 创建的 lm 对象列表一起使用在拆分的 data.frame 上

r - 如何在 R Statistics 中的数字字符串中粘贴逗号 (,)?

r - 向量化 R 表达式

c++ - 如何比较物体之间的相对旋转?

Java 16 位对齐

r - 如何将 data.table 列发送到函数

c - 行主矩阵乘法与列主矩阵乘法

c++ - 我如何着手重载 C++ 运算符以允许链接?

c++ - 使用分而治之法将二进制转换为十进制