我有一个很大的偏好矩阵P,有100多行患者和100多列肾脏偏好。我必须以某种方式将这些肾脏分配给患者。在我找到第一个分配子集之后,我想1.从要考虑的患者中移除患者,以及2.在偏好矩阵中替换已分配给NA的肾脏。我多次循环这个过程。我知道该怎么做1.但是当我尝试做的时候2.我想改变为NA的一些数字实际上只会改变。
完成循环后,我会得到一个肾脏矢量,分配如下:
taken= c(94, 42, 72, 12, 45, 68, 10, 100, 98)
然后,我尝试使用NA将偏好矩阵P中的这些数字替换为NA:
P[P==taken]=NA
但我仍然看到我试图在矩阵中替换的一些值。有什么建议?
我们可以使用apply
:
a=matrix(92:100,nrow = 3,ncol = 3)
taken= c(94, 42, 72, 12, 45, 68, 10, 100, 98)
在a
之前的NA
[,1] [,2] [,3]
[1,] 92 95 98
[2,] 93 96 99
[3,] 94 97 100
a[apply(a,1,function(x) (x%in%taken))]=NA
a
之后的NA
[,1] [,2] [,3]
[1,] 92 95 NA
[2,] 93 96 99
[3,] NA 97 NA
我不确定我理解这个问题,但这可能会回答它。
# Generate preference matrix
P <- matrix(1:100,nrow = 10)
P
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> [1,] 1 11 21 31 41 51 61 71 81 91
#> [2,] 2 12 22 32 42 52 62 72 82 92
#> [3,] 3 13 23 33 43 53 63 73 83 93
#> [4,] 4 14 24 34 44 54 64 74 84 94
#> [5,] 5 15 25 35 45 55 65 75 85 95
#> [6,] 6 16 26 36 46 56 66 76 86 96
#> [7,] 7 17 27 37 47 57 67 77 87 97
#> [8,] 8 18 28 38 48 58 68 78 88 98
#> [9,] 9 19 29 39 49 59 69 79 89 99
#> [10,] 10 20 30 40 50 60 70 80 90 100
# Removed for example with smaller matrix
taken= c(1,2,5, 10)
# Set taken rows to NA
P[taken,1:dim(P)[2]] = NA
P
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> [1,] NA NA NA NA NA NA NA NA NA NA
#> [2,] NA NA NA NA NA NA NA NA NA NA
#> [3,] 3 13 23 33 43 53 63 73 83 93
#> [4,] 4 14 24 34 44 54 64 74 84 94
#> [5,] NA NA NA NA NA NA NA NA NA NA
#> [6,] 6 16 26 36 46 56 66 76 86 96
#> [7,] 7 17 27 37 47 57 67 77 87 97
#> [8,] 8 18 28 38 48 58 68 78 88 98
#> [9,] 9 19 29 39 49 59 69 79 89 99
#> [10,] NA NA NA NA NA NA NA NA NA NA