【发布时间】:2021-09-06 09:33:12
【问题描述】:
我有一个包含这种格式的表格的文件列表。表格尺寸可能不同。 我想在每行和每列中找到第二个最低成本和最低最低成本之间的差异。
在此示例中,我想将 max 替换为第二个最低成本。我不知道如何获得它。
data
r_data = nrow(data)
col_data = ncol(data)
cost = data[1:(r_data-1), 1:(col_data-1)]
## cost for the table
supply = data[1:(r_data-1),col_data]
demand = data[r_data, 1:(col_data-1)]
cost
supply
demand
## for the rows difference
min_dif_row <- apply(cost, 1, max) - apply(cost, 1, min)
min_dif_row
min_dif_row 的输出应该是 5 1 1 而不是 58 73 73。
非常感谢您的支持。
【问题讨论】:
-
(a) 你能分享一些复制/粘贴格式的样本数据吗? (b) 如果有联系,你希望发生什么?如果有 2 个最大值,它们都被替换了吗?如果有 2 个值与最小值相关联,那么差异是 0 吗?“第二个最小值”是否与第一个相同?
-
对于最小差异,您可以尝试
apply(cost, 1, function(x) abs(diff(x[rank(x) %in% c(1, 2)]))),但您可能应该为rank设置一个ties.method参数,并且可能需要根据您对我上面问题的回答进行调整. -
## [,1] [,2] [,3] [,4] [1,] 67 14 18 9 [2,] 76 3 21 4 [3,] 47 4 77 5 ##最小值为9,下一个最小值为14。如果平局,则使用第二个最小值,因此差值不能为0。
-
能否请您与
dput()共享数据以便复制/粘贴?dput(data[1:5, 1:3])会很棒。 -
dput(data = matrix(c(67,14,18,9,38,76,3,21,4,20,47,4, 77,5,18,5, 24, 35,12, 76), ncol= 5, byrow = TRUE))
标签: r sorting optimization min