Замена нескольких значений в матрице одновременно в R - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть большая матрица предпочтений 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

Но я все еще вижу некоторые значения, которые я пытаюсь заменить в матрице. Любой совет?

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Не уверен, что понимаю вопрос, но это может ответить на него.

# 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
0 голосов
/ 10 сентября 2018

Мы можем использовать 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
...