我正在研究二进制整数编程分配,我希望输入约束条件的所有1和0会有捷径。我创建了两个矩阵。第一个包含全零,第二个包含全零。
我有34个变量,并像这样创建了两个矩阵(尽管我可能不需要创建这些矩阵:]
zero_constraints = matrix(data = 0, nrow = 1, ncol = 34)
one_constraints = matrix(data = 1, nrow = 1, ncol = 34)
这是约束的一个示例:
# He therefore decides to include only one collage.
filter(data_raw, data_raw$Medium.Style == "Collage")$ID
输出:
[1] 9 16 29 30
我给每个变量一个数字,所以这些数字意味着我需要将变量9、16、29和30设为1,将其余变量设为0。
我迷路的地方:
one_constraints[, c(filter(data_raw, data_raw$Medium.Style == "Collage")$ID)]
我知道上面的行从34个1的矩阵中获得了我所需的” 1”,因此我尝试将我的两个矩阵分别为1和0:]
cat( one_constraints[, c(filter(data_raw, data_raw$Medium.Style == "Collage")$ID)], zero_constraints[, -c(filter(data_raw, data_raw$Medium.Style == "Collage")$ID)] )
输出:
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
但是这不是所需的输出。开头不应排成一排。它应该看起来像这样:
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0
如果这太复杂了,我可以按照我最初的计划来绑定矩阵,这就是我创建上面的方法。
如果您想要该代码:
我尝试了这个答案:cbind( matrix(data = 0, nrow = 1, ncol = 8), # 1-8 1, # 9 matrix(data = 0, nrow = 1, ncol = 6), # 10-15 1, # 16 matrix(data = 0, nrow = 1, ncol = 12), # 17 1, 1, # 29, 30 matrix(data = 0, nrow = 1, ncol = 4) # 31-34 )
编辑
inds <- c(9, 16, 29, 30) mat <- matrix(0, ncol = 34) mat[, inds] <- 1
通过这样做:
twnety_one_con <- filter(filter(data_raw, data_raw$Medium.Style == "Collage")$ID) twnety_one_mat <- matrix(data = 0, nrow = 1, ncol =34) mat <- (twnety_one_mat[, twnety_one_mat] <- 1)
我可能做错了,但是不起作用。它返回一个1的向量,当我将其添加到代码的add.constraint位时,它确认它与向量长度不匹配。
我正在研究二进制整数编程分配,我希望输入约束条件的所有1和0会有捷径。我创建了两个矩阵。第一个包含...
您可以使用:
inds <- c(9, 16, 29, 30)
mat <- matrix(0, ncol = 34)
mat[, inds] <- 1
在OP的功能中,来自filter
步骤的索引返回代表列索引的'ID'。我们只需要将值[<-
]分配给1