r - R:我如何将solve_LSAP翻译成数据框?
问题描述
我正在尝试做一个大的分配问题,并且正在使用 LSAP。它有效,但我试图将输出放入数据框中,以便我可以用它做更多事情。但是,该函数的文档显示“具有行到列的最佳分配的类“solve_LSAP”的对象”,没有关于数据的更多信息。我似乎无法打开课程以将数据分解成更可用的形式。
我已经提供了他们的示例代码。
x <- matrix(c(5, 1, 4, 3, 5, 2, 2, 4, 4), nrow = 3)
y <- solve_LSAP(x, maximum = FALSE)
y
输出:
Optimal assignment:
1 => 3, 2 => 1, 3 => 2
我有 200 多个作业,而基线输出对我来说根本不可用。我怎样才能把它翻译成一个数据框,或者至少是一个看起来像下面这样的矩阵?
Row Column
1 3
2 1
3 2
解决方案
每行solve_LSAP
返回列索引,因此包含重建所需的所有内容:
len <- length(y)
parsedMat <- cbind(
1:len,
as.integer(y)
)
parsedMat
[,1] [,2]
[1,] 1 3
[2,] 2 1
[3,] 3 2
这可以通过以下方式转化为求解矩阵:
solvedMat <- matrix(0, nrow = len, ncol = len)
solvedMat[parsedMat] <- 1
solvedMat
[,1] [,2] [,3]
[1,] 0 0 1
[2,] 1 0 0
[3,] 0 1 0
您还可以将其转换为一个函数,该函数将以列表的形式返回两个输出,例如:
parseClueOutput <- function(x) {
len <- length(x)
parsedMat <- cbind(
1:len,
as.integer(x)
)
solvedMat <- matrix(0, nrow = len, ncol = len)
solvedMat[parsedMat] <- 1
return(
list(
parsedMat = parsedMat,
solvedMat = solvedMat
)
)
}
并将其用作:
parseClueOutput(y)
$parsedMat
[,1] [,2]
[1,] 1 3
[2,] 2 1
[3,] 3 2
$solvedMat
[,1] [,2] [,3]
[1,] 0 0 1
[2,] 1 0 0
[3,] 0 1 0
至于结构,这solve_LSAP
并不是一个复杂的对象,它本质上是一个数字向量,您可以通过以下方式看到:
is.numeric(y)
[1] TRUE
或者:
str(y)
'solve_LSAP' num [1:3] 3 1 2
您还可以轻松地将solvedMat
orparsedMat
转换为数据框 - 例如parsedMat
:
setNames(as.data.frame(parsedMat), c('Row', 'Column'))
Row Column
1 1 3
2 2 1
3 3 2
推荐阅读
- c# - UWP 项目与 netcoreapp2.1 不兼容
- azure-devops - 如何重命名状态
- wordpress - Gravity Forms 文件上传导致 WordPress Admin 出现 404
- asp.net-mvc - 在具有单独数据库的现有项目中使用 IdentityUser
- vb.net - 内存文件被第三方软件破坏
- python-3.x - 如何为散景动画创建缩放滑块?
- html - 502 Bad Gateway 服务器返回无效或不完整的响应
- css - 如何以 100% ReactJS 强制网页缩放
- c# - 如何修复/诊断“远程服务器返回错误:(400)错误请求。” 对于在站点 A 上工作但不在站点 B 上的查询
- jenkins - 无法从詹金斯构建 Maven 项目