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

时间:2018-09-10 10:56:14

标签: r vector replace na

我有一个大的偏好矩阵P,其中包含100多个患者行和100多个肾脏偏好列。我必须以某种方式将这些肾脏分配给患者。在找到分配的第一个子集之后,我想1.从考虑的患者中删除患者,并2.替换在偏好矩阵中分配给NA的肾脏。我多次循环执行此过程。我知道该怎么做。但是当我尝试做2.时,我想更改为NA的数字实际上只有少数改变。

完成循环后,我将得到一个肾脏分配向量,如下所示:

import { HashRouter } from 'react-router-dom'

ReactDOM.render((
  <HashRouter>
    <App />
  </HashRouter>
), holder)

然后我尝试通过以下方式用NA替换优先矩阵P中的这些数字:

taken= c(94, 42, 72, 12, 45, 68, 10, 100, 98)

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

2 个答案:

答案 0 :(得分:0)

我们可以使用apply

a=matrix(92:100,nrow = 3,ncol = 3)
taken= c(94, 42, 72, 12, 45, 68, 10, 100, 98)

aNA之前

     [,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

aNA之后

      [,1] [,2] [,3]
[1,]   92   95   NA
[2,]   93   96   99
[3,]   NA   97   NA

答案 1 :(得分: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