如何合并/合并两个相同长度的矩阵,以“填充”其中一个矩阵的空白? R问题

问题描述 投票:1回答:2

我正在研究二进制整数编程分配,我希望输入约束条件的所有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会有捷径。我创建了两个矩阵。第一个包含...

r matrix binary integer concat
2个回答
1
投票

您可以使用:

inds <- c(9, 16, 29, 30)
mat <- matrix(0, ncol = 34)
mat[, inds] <- 1

0
投票

在OP的功能中,来自filter步骤的索引返回代表列索引的'ID'。我们只需要将值[<-]分配给1

© www.soinside.com 2019 - 2024. All rights reserved.