如何将两个相同长度的矩阵连接/组合到其中一个矩阵的"fill in the blanks"?R 问题



我正在做一个二进制整数编程任务,我希望有一个捷径来输入约束的所有 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 和 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(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 代码位时,它确认它与向量长度不匹配

您可以使用:

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

在 OP 的函数中,filter步骤中的索引返回表示列索引的 'ID'。 我们只需要将 (<-( 值分配给 1

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

mat
#     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] #[,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24]
#[1,]    0    0    0    0    0    0    0    0    1     0     0     0     0     0     0     #1     0     0     0     0     0     0     0     0
#     [,25] [,26] [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34]
#[1,]     0     0     0     0     1     1     0     0     0     0

相关内容

  • 没有找到相关文章

最新更新