在R中一次替换矩阵中的多个值

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

我有一个很大的偏好矩阵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

但我仍然看到我试图在矩阵中替换的一些值。有什么建议?

r vector replace na
2个回答
0
投票

我们可以使用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

0
投票

我不确定我理解这个问题,但这可能会回答它。

# 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
© www.soinside.com 2019 - 2024. All rights reserved.