我如何自动构建一个矩阵,转换 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/