【问题标题】:Replacing multiple values in matrix at once in R在R中一次替换矩阵中的多个值
【发布时间】:2019-02-14 19:12:03
【问题描述】:

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

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

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

然后我尝试使用以下方法将偏好矩阵 P 中的这些数字替换为 NA:

P[P==taken]=NA

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

【问题讨论】:

  • P[P %in% taken] = NA? == 只能与一个值进行比较,而不是值的向量。 %in% 将在整个向量 taken 中查找值。
  • 我已经尝试过了,但不幸的是,这也将所有原始值留在了矩阵中。
  • 你可以遍历“taken”然后你的代码应该可以工作了。
  • 那行得通@JacobJacox。谢谢!

标签: r vector replace na


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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


    # 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
    

    【讨论】:

      猜你喜欢
      • 2013-10-27
      • 2016-09-10
      • 1970-01-01
      • 2021-02-19
      • 2020-08-08
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多