#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