Измените значения одной матрицы в зависимости от значения в соответствующих ячейках другой матрицы - PullRequest
0 голосов
/ 18 июня 2020

У меня есть две одинаковые матрицы диммирования, такие как

**matrix1**
  1  2  3  4 
A 1  0  0  1
B 1  0  1  1
C 1  0  1  0
D 0  1  1  0

**matrix2**

  1  2  3  4 
A a  0  0  x
B b  0  x  a
C x  0  a  0
D 0  c  b  0

, и я хотел бы преобразовать значение в 0 в matrix1, если соответствующая ячейка в matrix2 - x и сохранить исходное число, если это другая буква.

Я должен получить

New_matrix1

  1  2  3  4 
A 1  0  0  0
B 1  0  0  1
C 0  0  1  0
D 0  1  1  0

Есть у кого-нибудь идея?

матрица1

structure(c(1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 
1L, 0L, 0L), .Dim = c(4L, 4L), .Dimnames = list(c("A", "B", "C", 
"D"), c("1", "2", "3", "4")))

матрица2

structure(c("a", "b", "x", "0", "0", "0", "0", "c", "0", "x", 
"a", "b", "x", "a", "0", "0"), .Dim = c(4L, 4L), .Dimnames = list(
    c("A", "B", "C", "D"), c("1", "2", "3", "4")))

Ответы [ 2 ]

2 голосов
/ 18 июня 2020

Вы можете использовать

m1[m2 == "x"] <- 0
m1

#   1 2 3 4
# A 1 0 0 0
# B 1 0 0 1
# C 0 0 1 0
# D 0 1 1 0
1 голос
/ 18 июня 2020

Мы можем

m1 - (m2 == "x")
#  1 2 3 4
#A 1 0 0 0
#B 1 0 0 1
#C 0 0 1 0
#D 0 1 1 0

данные

m1 <- structure(c(1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 
                  1L, 0L, 0L), .Dim = c(4L, 4L), .Dimnames = list(c("A", "B", "C", 
                                                                    "D"), c("1", "2", "3", "4")))
m2 <- structure(c("a", "b", "x", "0", "0", "0", "0", "c", "0", "x", 
                  "a", "b", "x", "a", "0", "0"), .Dim = c(4L, 4L), .Dimnames = list(
                    c("A", "B", "C", "D"), c("1", "2", "3", "4")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...