заменить столбец с учетом положения отрицательного числа другого вектора в R?

#r #matrix #vector

#r #матрица #вектор

Вопрос:

 A<-matrix(c(1,2,1,1,1,2,1,1,1),nrow=3,ncol=3)
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    1    1
[3,]    1    2    1

B<-c(1,2,-1)
  

Например, я хочу заменить весь третий столбец на все NA, потому что третий элемент в B отрицательный.
Я думал о чем-то вроде этого

 NegNum<-length(B[B<0])
A[,tail(NegNum)]<-NA
  

Отрицательные числа всегда находятся в последних n позициях B, поэтому я попытался использовать tail, но я не уверен, как это работает.

Ответ №1:

Я бы предложил индексирование на основе B :

 #Matrix 1
A<-matrix(c(1,2,1,1,1,2,1,1,1),nrow=3,ncol=3)
#Vector
B<-c(1,2,-1)
#Solution
A[,which(B<0)]<-NA
  

Вывод:

      [,1] [,2] [,3]
[1,]    1    1   NA
[2,]    2    1   NA
[3,]    1    2   NA
  

Ответ №2:

Вот еще один базовый вариант R

 A %*% diag(replace(B, B < 0, NA))
  

или

 replace(A,cbind(seq(nrow(A)),rep(which(B<0),nrow(A))),NA)
  

что дает

      [,1] [,2] [,3]
[1,]    1    1   NA
[2,]    2    1   NA
[3,]    1    2   NA